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 转换为适配器,然后以相同的方式通过使用代码的级别传递适配器。

另请参阅