Supposons, par exemple, dans une toute nouvelle application ASP.NET MVC 5 créée à partir du modèle MVC avec comptes individuels, si je supprime la classe Global.asax.cs
et déplace son code de configuration vers Startup.cs
Configuration()
méthode comme suit, quels sont les inconvénients?
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ConfigureAuth(app);
}
}
Pour moi, le fait positif est que, lors de la mise à niveau d'applications ASP.NET 4 vers ASP.NET 5 et de l'utilisation d'éléments qui doivent maintenant être configurés dans la classe Startup.cs, je ne fais pas d'injection de dépendance ni d'autres configurations dans deux classes différentes qui semblent liées. au démarrage et à la configuration.
Startup.Configuration est appelé un peu plus tard que Application_Start, mais je ne pense pas que la différence importera beaucoup dans la plupart des cas.
Je crois que les principales raisons pour lesquelles nous avons conservé l’autre code dans Global.asax sont les suivantes:
Je pense que la troisième raison est la raison la plus importante pour laquelle nous n’avons pas adopté cette approche par défaut, car certains scénarios n’incluent pas cette DLL et il est agréable de pouvoir modifier les méthodes d’authentification sans invalider l’emplacement où du code non lié enregistrement de la route) est placé.
Mais si aucune de ces raisons ne s’applique dans votre scénario, je pense que vous iriez bien avec cette approche.
Pour ceux qui recherchent la totalité des étapes: Si vous souhaitez créer une API Web hébergée basée sur IIS et basée sur OWIN, ces étapes devraient vous y aider:
File -> New -> Project
Installed -> templates -> Other Project types -> Visual Studio Solutions -> Blank Solution targeting .NET 4.6
Sur la solution, cliquez avec le bouton droit de la souris et ajoutez Project -> Web -> ASP.NET Web Application
(ciblant .NET 4.6).
3.1 Maintenant, dans les modèles ASP.NET 4.5, choisissez le modèle vide.
3.2 Cela crée une solution vide avec deux paquets de nuget:
Microsoft.CodeDom.Providers.DotNetCompilerPlatform v 1.0.0
Microsoft.Net.Compilers v 1.0.0
Installez les packages suivants:
Install-Package Microsoft.AspNet.WebApi.WebHost -Version 5.2.3
Install-Package Microsoft.AspNet.WebApi -Version 5.2.3
Install-Package WebApiContrib.Formatting.Razor 2.3.0.0
Pour OWIN:
Install-Package Microsoft.Owin.Host.SystemWeb
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
Ajoutez ensuite Startup.cs avec la méthode de configuration:
[Assembly:OwinStartup(typeof(namespace.Startup))]
public class Startup
{
/// <summary> Configurations the specified application. </summary>
/// <param name="app">The application.</param>
public static void Configuration(IAppBuilder app)
{
var httpConfiguration = CreateHttpConfiguration();
app
.UseWebApi(httpConfiguration);
}
/// <summary> Creates the HTTP configuration. </summary>
/// <returns> An <see cref="HttpConfiguration"/> to bootstrap the hosted API </returns>
public static HttpConfiguration CreateHttpConfiguration()
{
var httpConfiguration = new HttpConfiguration();
httpConfiguration.MapHttpAttributeRoutes();
return httpConfiguration;
}
}
Maintenant, ajoutez une classe qui hérite de ApiController
, annotez-la avec l'attribut RoutePrefix
et la méthode d'action avec Route + HttpGet/PutPost
(représentant le verbe HTTP que vous êtes après) et vous devriez être prêt à partir
C’est ce que je comprends de la façon dont le lancement/l’hébergement d’une application Web a évolué, car il est très compliqué à suivre. Un petit résumé:
1. Classic ASP.NET: N'écrivez que le code de l'application à exécuter à la dernière étape du pipeline obligatoire IIS.
2. ASP.NET avec OWIN: Configurez un serveur Web .NET et écrivez le code de votre application. N'est plus couplé directement à IIS, vous n'êtes donc plus obligé de l'utiliser.
3. ASP.NET Core: Configurez l'hôte et le serveur Web pour qu'ils utilisent et écrivent le code de votre application. N'est plus obligatoire d'utiliser un serveur Web .NET si vous ciblez .NET Core au lieu de l'intégralité du .NET Framework.
Maintenant, je vais aller un peu plus en détail sur comment cela fonctionne et quelles classes sont utilisées pour démarrer l'application:
Les applications ASP.NET classiques ont le fichier Global.asax
comme point d’entrée. Ces applications ne peuvent être exécutées que dans IIS et votre code est exécuté à la fin du pipeline IIS (donc IIS est responsable de CORS, de l'authentification ... avant même que votre code ne s'exécute). Depuis IIS 7, vous pouvez exécuter votre application en mode intégré qui intègre le runtime ASP.NET dans IIS. Cela permet à votre code de configurer des fonctionnalités qui n’étaient pas possibles auparavant (ou uniquement dans IIS lui-même), telles que réécriture d’URL dans l’événement Application_Start
de votre Global.asax
fichier ou utilisez la nouvelle section <system.webserver>
de votre fichier web.config
.
Tout d'abord OWIN n'est pas une bibliothèque, mais une spécification de la manière dont les serveurs Web .NET (par exemple, IIS) interagissent avec les applications Web. Microsoft eux-mêmes ont une implémentation d'OWIN appelée projet Katana (distribuée via plusieurs packages NuGet). Cette implémentation fournit l'interface IAppBuilder
que vous rencontrez dans une classe Startup
et certains composants de middleware OWIN (OMC) fournis par Microsoft. En utilisant IAppBuilder
, vous composez un middleware plug-and-play pour créer le pipeline du serveur Web (en plus du pipeline ASP.NET dans IIS7 + comme indiqué ci-dessus) au lieu d'être lié au IIS pipeline (mais vous utilisez maintenant un composant middleware pour CORS, un composant middleware pour l'authentification ...). De ce fait, votre application n'est plus spécifiquement couplée à IIS et vous pouvez l'exécuter sur n'importe quel serveur Web .NET, par exemple:
La chose qui rend tout si déroutant est que Global.asax
est toujours supporté avec la classe OWIN Startup
, alors qu'ils peuvent faire les mêmes choses. Par exemple, vous pouvez implémenter CORS dans Global.asax
et l'authentification à l'aide du middleware OWIN qui devient vraiment déroutant.
Ma règle d'or est de supprimer le fichier Global.asax
en faveur de l'utilisation de Startup
chaque fois que je dois ajouter OWIN.
ASP.NET Core est la prochaine évolution et vous pouvez désormais cibler soit le .NET Core, soit le .NET Framework complet. Lorsque vous ciblez .NET Core, vous pouvez exécuter votre application sur n’importe quel hôte prenant en charge le standard .NET. Cela signifie que vous n'êtes plus limité à un serveur Web .NET (comme dans le point précédent), mais pouvez héberger votre application dans des conteneurs Docker, un serveur Web Linux, IIS ...
Le point d'entrée d'une application Web ASP.NET Core est le fichier Program.cs
. Là, vous configurez votre hôte et spécifiez à nouveau votre classe Startup
dans laquelle vous configurez votre pipeline. L'utilisation de OWIN (à l'aide de la méthode d'extension IAppBuilder.UseOwin
) est facultative, mais entièrement prise en charge .