Поделиться через


Адаптеры System.Web

Основной вариант использования адаптеров в репозитории dotnet/systemweb-adapters — помочь разработчикам, которые System.Web использовали типы в своих библиотеках классов, так как они хотят перейти к ASP.NET Core.

Важной особенностью адаптеров является адаптеры, позволяющие использовать библиотеку как из 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 Framework

Рассмотрим контроллер, который выполняет такие действия, как:

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 , использующие код таким же образом.

См. также