Partager via


Cartes System.Web

Le main cas d’usage des adaptateurs dans le référentiel dotnet/systemweb-adaptersSystem.Web est d’aider les développeurs qui ont utilisé des types au sein de leurs bibliothèques de classes pour passer à ASP.NET Core.

Une fonctionnalité importante des cartes est que les adaptateurs permettent à la bibliothèque d’être utilisée à la fois à partir de ASP.NET Framework et de projets ASP.NET Core. La mise à jour de plusieurs applications ASP.NET Framework vers ASP.NET Core implique souvent des états intermédiaires où toutes les applications n’ont pas été entièrement mises à jour. En utilisant les System.Web adaptateurs, la bibliothèque peut être utilisée à la fois à partir des appelants ASP.NET Core et des appelants ASP.NET Framework qui n’ont pas été mis à niveau.

Examinons un exemple d’utilisation des adaptateurs qui passent du .NET Framework à ASP.NET Core.

ASP.NET Framework

Considérez un contrôleur qui effectue des actions telles que :

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

qui a ensuite une logique dans un assembly distinct passant que jusqu’à ce que HttpContext finalement, une méthode interne effectue une logique sur elle, comme :

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

ASP.NET Core

Pour exécuter la logique ci-dessus dans ASP.NET Core, un développeur doit ajouter le Microsoft.AspNetCore.SystemWebAdapters package, qui permettra aux projets de fonctionner sur les deux plateformes.

Les bibliothèques doivent être mises à jour pour comprendre les adaptateurs, mais il suffit d’ajouter le package et de recompiler. S’il s’agit des seules dépendances d’un système sur System.Web.dll, les bibliothèques pourront cibler .NET Standard 2.0 pour faciliter un processus de création plus simple lors de la migration.

Le contrôleur dans ASP.NET Core se présente désormais comme suit :

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

Notez que puisqu’il y a une HttpContext propriété, ils peuvent le transmettre, mais cela ressemble généralement à la même chose. À l’aide HttpContext de conversions implicites, le peut être converti en l’adaptateur qui peut ensuite être transmis via les niveaux utilisant le code de la même manière.

Voir aussi