System.Web-Adapter

Die Adapter im Repository dotnet/systemweb-adapters werden hauptsächlich dazu verwendet, Entwicklern zu helfen, die sich auf System.Web-Typen innerhalb ihrer Klassenbibliotheken verlassen haben, wenn sie zu ASP.NET Core wechseln möchten.

Ein wichtiges Feature der Adapter ist, dass sie die Verwendung der Bibliothek sowohl aus ASP.NET Framework als auch aus ASP.NET Core-Projekten ermöglichen. Das Aktualisieren mehrerer ASP.NET Framework-Apps auf ASP.NET Core beinhaltet häufig Zwischenzustände, in denen nicht alle Apps vollständig aktualisiert wurden. Mithilfe der System.Web-Adapter kann die Bibliothek sowohl von ASP.NET Core-Aufrufern als auch von ASP.NET Framework-Aufrufern verwendet werden, für die kein Upgrade durchgeführt wurde.

Sehen wir uns ein Beispiel für die Verwendung von Adaptern für den Wechsel von .NET Framework zu ASP.NET Core an.

ASP.NET Framework

Stellen Sie sich einen Controller vor, der folgendes tut:

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

der dann Logik in einer separaten Assembly aufweist, die den HttpContext übergibt, bis schließlich eine innere Methode Logik darauf ausführt, z. B.:

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

ASP.NET Core

Um die oben genannte Logik in ASP.NET Core auszuführen, muss ein Entwickler das Microsoft.AspNetCore.SystemWebAdapters-Paket hinzufügen, damit die Projekte auf beiden Plattformen funktionieren können.

Die Bibliotheken müssten aktualisiert werden, um die Adapter zu verstehen, aber es ist so einfach wie das Hinzufügen des Pakets und das erneute Kompilieren. Wenn dies die einzigen Abhängigkeiten sind, die ein System in System.Web.dll aufweist, können die Bibliotheken auf NET Standard 2.0 abzielen, um einen einfacheren Erstellungsprozess während der Migration zu ermöglichen.

Der Controller in ASP.NET Core sieht nun wie folgt aus:

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

Beachten Sie, dass sie, da es eine HttpContext-Eigenschaft gibt, diese übergeben können, aber es sieht im Allgemeinen gleich aus. Mithilfe impliziter Konvertierungen kann der HttpContext in den Adapter konvertiert werden, der dann über die Ebenen übergeben werden kann, die den Code auf die gleiche Weise verwenden.

Siehe auch