Compartilhar via


Adaptadores System.Web

O principal caso de uso dos adaptadores no repositório dotnet/systemweb-adapters é ajudar os desenvolvedores que têm uma dependência de tipos System.Web dentro de suas bibliotecas de classes, pois desejam migrar para o ASP.NET Core.

Um recurso importante dos adaptadores é que os adaptadores permitem que a biblioteca seja usada de projetos do ASP.NET Framework e ASP.NET Core. Atualizar vários aplicativos do ASP.NET Framework para ASP.NET Core geralmente envolve estados intermediários em que nem todos os aplicativos foram totalmente atualizados. Usando os adaptadores System.Web, a biblioteca pode ser usada de chamadores do ASP.NET Core e chamadores do ASP.NET Framework que não foram atualizados.

Vamos dar uma olhada em um exemplo usando os adaptadores que se movem do .NET Framework para o ASP.NET Core.

ASP.NET Framework

Considere um controlador que faça algo como:

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

que, em seguida, tem lógica em um assembly separado passando esse HttpContext até que, finalmente, algum método interno realizar alguma lógica sobre ele, como:

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

ASP.NET Core

Para executar a lógica acima no ASP.NET Core, um desenvolvedor precisará adicionar o pacote Microsoft.AspNetCore.SystemWebAdapters, que permitirá que os projetos funcionem em ambas as plataformas.

As bibliotecas precisariam ser atualizadas para entender os adaptadores, mas será tão simples quanto adicionar o pacote e recompilar. Se essas forem as únicas dependências que um sistema tem no System.Web.dll, as bibliotecas poderão direcionar o .NET Standard 2.0 para facilitar um processo de criação mais simples durante a migração.

O controlador no ASP.NET Core agora terá esta aparência:

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

Observe que, como há uma propriedade HttpContext, eles podem passar por isso, mas geralmente têm a mesma aparência. Usando conversões implícitas, o HttpContext pode ser convertido no adaptador que pode ser passado pelos níveis que utilizam o código da mesma maneira.

Confira também