System.Web 适配器
dotnet/systemweb-adapters 存储库中适配器的主要用例是帮助那些在想要迁移到 ASP.NET Core 时依赖类库中 System.Web
类型的开发人员。
适配器的一个重要功能是适配器允许从ASP.NET Framework 和 ASP.NET Core 项目使用库。 将多个 ASP.NET Framework 应用更新为 ASP.NET Core 通常涉及并非所有应用都已完全更新的中间状态。 通过使用 System.Web
适配器,可以从 ASP.NET Core 调用方和尚未升级的 ASP.NET Framework 调用方使用库。
我们来看看一个使用适配器从 .NET Framework 迁移到 ASP.NET Core 的示例。
ASP.NET 框架
请考虑执行如下操作的控制器:
public class SomeController : Controller
{
public ActionResult Index()
{
SomeOtherClass.SomeMethod(HttpContext.Current);
}
}
然后,它在一个单独的程序集中具有逻辑,四处传递该 HttpContext,直到最后,某个内部方法对它执行一些逻辑,例如:
public class Class2
{
public bool PerformSomeCheck(HttpContext context)
{
return context.Request.Headers["SomeHeader"] == "ExpectedValue";
}
}
ASP.NET Core
为了在 ASP.NET Core 中运行上述逻辑,开发人员需要添加 Microsoft.AspNetCore.SystemWebAdapters
包,使项目能够在这两个平台上工作。
需要更新库以了解适配器,但这将非常简单,只需添加包并重新编译即可。 如果这些是系统对 System.Web.dll
的唯一依赖项,则库将能够以 .NET Standard 2.0 为目标,以便在迁移时简化构建过程。
ASP.NET Core 中的控制器现在如下所示:
public class SomeController : Controller
{
[Route("/")]
public IActionResult Index()
{
SomeOtherClass.SomeMethod(HttpContext);
}
}
请注意,由于有 HttpContext 属性,它们可以传递该属性,但它通常看起来是相同的。 使用隐式转换,可以将 HttpContext 转换为适配器,然后以相同的方式通过使用代码的级别传递适配器。