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.