Share via


Adaptadores System.Web

El caso de uso principal de los adaptadores en el repositorio dotnet/systemweb-adapters es ayudar a los desarrolladores que se han basado en los tipos System.Web dentro de sus bibliotecas de clases, ya que quieren pasar a ASP.NET Core.

Una característica importante de los adaptadores es que permiten usar la biblioteca tanto desde proyectos de ASP.NET Framework como de ASP.NET Core. La actualización de varias aplicaciones de ASP.NET Framework a ASP.NET Core suele implicar estados intermedios en los que no todas las aplicaciones se han actualizado completamente. Mediante el uso de los adaptadores System.Web, la biblioteca se puede usar tanto desde los llamadores que no se han actualizado de ASP.NET Core como los de ASP.NET Framework.

Echemos un vistazo a un ejemplo con los adaptadores que se mueven de .NET Framework a ASP.NET Core.

ASP.NET Framework

Considere un controlador que haga algo como:

public class SomeController : Controller
{
  public ActionResult Index()
  {
    SomeOtherClass.SomeMethod(HttpContext.Current);
  }
}

que luego tiene lógica en un ensamblado independiente pasando ese HttpContext de un lado a otro hasta que, finalmente, algunos métodos internos hacen alguna lógica en él, como:

public class Class2
{
  public bool PerformSomeCheck(HttpContext context)
  {
    return context.Request.Headers["SomeHeader"] == "ExpectedValue";
  }
}

ASP.NET Core

Para ejecutar la lógica anterior en ASP.NET Core, un desarrollador deberá agregar el paquete Microsoft.AspNetCore.SystemWebAdapters, lo que permitirá que los proyectos funcionen en ambas plataformas.

Las bibliotecas deberán actualizarse para reconocer los adaptadores, pero será tan sencillo como agregar el paquete y volver a compilar. Si estas son las únicas dependencias que tiene un sistema en System.Web.dll, las bibliotecas podrán tener como destino .NET Standard 2.0 para facilitar un proceso de creación más sencillo durante la migración.

El controlador de ASP.NET Core ahora tendrá este aspecto:

public class SomeController : Controller
{
  [Route("/")]
  public IActionResult Index()
  {
    SomeOtherClass.SomeMethod(HttpContext);
  }
}

Tenga en cuenta que, dado que hay una propiedad HttpContext, pueden pasarlo a través, pero generalmente tiene el mismo aspecto. Con conversiones implícitas, HttpContext se puede convertir en el adaptador que se podría pasar a través de los niveles que usan el código de la misma manera.

Consulte también