web-dev-qa-db-fra.com

System.Web peut-il être utilisé avec ASP.Net Core avec Full Framework

Nous gérons de nombreux sites basés sur différentes versions de .Net.

L'un des sites exécute .Net 4.6 et ASP.Net MVC 5.xx

Pour utiliser la nouvelle syntaxe pour Razor, nous voulons mettre à niveau ce site pour utiliser .Net 4.6 et ASP.Net Core

Nous utilisons FormsAuthentication sur nos sites, et nous continuerons à l'utiliser pour que l'utilisateur puisse se déplacer entre les sites. (l'un des sites est un site SharePoint exécutant FormsAuthentication)

Nous comprenons qu'ASP.Net Core n'utilise rien de System.Web mais nous devons l'utiliser à partir des contrôleurs (pour créer le cookie FormsAuthentication lors de la connexion) et de HttpModule pour vérifier le cookie.

Je n'ai pas pu trouver d'exemple sur la façon d'utiliser system.web à partir d'un site exécutant ASP.Net Core avec Full Framwork. Je n'ai pas pu ajouter de dépendance pour system.web dans project.json.

Des questions.

  1. Est-il possible d'utiliser system.web à partir d'une configuration comme celle-ci?

  2. Comment pouvons-nous ajouter une dépendance à system.web pour que System.Web.FormsAuthentication soit disponible depuis ASP.NET MVC 6. (Contrôleurs/module http)

15
TheTechArch

L'utilisation de la DLL System.Web n'est pas la même chose que l'utilisation de System.Web. Aucun du pipeline System.Web ne s'exécutera pour votre application ASP.NET Core, vous ne pouvez donc pas faire ce que vous essayez de faire.

6
davidfowl

Cela peut ne pas fonctionner comme vous le pensez. Lorsque vous utilisez .Net Core MVC par rapport au framework complet, il est vrai que l'espace de noms System.Web existe et pourrait techniquement être appelé, mais il ne fonctionnera pas comme vous le souhaitez. La raison en est que le pipeline de demandes pour Asp.Net Core et System.Web est totalement différent. Ainsi, par exemple, lorsque vous utilisez Asp.Net Core MVC si vous vérifiez l'objet HttpContext à partir du moment où une demande arrive, il sera rempli avec toutes les informations que vous attendez, mais si vous vérifiez la demande actuelle à l'aide des objets System.Web, vous verrez que leur est pas une demande actuelle. C'est parce que la demande actuelle n'est pas entrée via le pipeline System.Web. Il est entré par le biais du "pipeline" .Net Core si vous voulez. Donc, si vous utilisez .Net Core MVC, vous devrez vous en tenir aux outils et aux approches de ce cadre, et non à ceux fournis dans System.Web.

Cependant, il devrait être possible de référencer le System.Web.dll si votre vraiment le veut. Si vous utilisez VS2015, vous devrez obtenir une copie de System.Web.Dll et l'envelopper dans un package nuget afin d'établir une référence à celui-ci. Voir ici . Net core 1.0 visual studio faisant référence à une DLL externe VS2017RC a un outil alpha qui devrait éliminer la nécessité de l'envelopper dans un package NuGet mais j'ai eu du mal à l'installer sur ma machine, donc je ne peux pas en témoigner personnellement. Mise à jour: VS2017 dispose désormais d'un excellent outil pour Asp.Net Core et référençant les DLL complètes du framework.

10
Ron C