Digamos, por ejemplo, en una nueva aplicación ASP.NET MVC 5 hecha desde la plantilla MVC con Cuentas Individuales, si elimino la Global.asax.cs
clase y muevo su código de configuración al Startup.cs
Configuration()
método de la siguiente manera, ¿cuáles son las desventajas?
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);
}
}
Lo bueno para mí es que cuando actualizo aplicaciones ASP.NET 4 a ASP.NET 5 y utilizo piezas que ahora deben configurarse en la clase Startup.cs, no estoy haciendo la inyección de dependencia y otras configuraciones en dos clases diferentes que parecen relacionadas a la puesta en marcha, y la configuración.
c#
asp.net
asp.net-mvc
asp.net-mvc-5
owin
iliketocode
fuente
fuente
AreaRegistration.RegisterAllAreas();
Causó un error para mí, ya que este método no se puede usar durante el inicio de esta manera, solo enApplication_Start
. Sin embargo, mi aplicación es una API y este método aparentemente solo es útil para aplicaciones MVC: stackoverflow.com/questions/18404637/…Respuestas:
Startup.Configuration se llama un poco más tarde que Application_Start, pero no creo que la diferencia importe mucho en la mayoría de los casos.
Creo que las principales razones por las que guardamos el otro código en Global.asax son:
Creo que la tercera razón es la más importante, no tomamos este enfoque de forma predeterminada, ya que algunos escenarios no incluyen tener esta DLL, y es bueno poder cambiar los enfoques de autenticación sin invalidar la ubicación donde el código no relacionado (como registro de ruta) se coloca.
Pero si ninguna de esas razones se aplica en su escenario, creo que estaría bien con este enfoque.
fuente
WebApi.Owin
sencillo para una API web, así que creé un sitio web ASP.NET de plantilla vacía y agregué el paquete nuget. Esperaba erróneamente que la dependencia incluyera todo para ejecutarse en IIS. No tengo idea de por qué pensé que, en primer lugar, quería un inicio de Owin para desacoplar la dependencia de IIS.Para aquellos que buscan los pasos completos: si está buscando crear una API web alojada en IIS basada en OWIN, estos pasos deberían llevarlo hasta allí:
File -> New -> Project
Installed -> templates -> Other Project types -> Visual Studio Solutions -> Blank Solution targeting .NET 4.6
En la solución, haga clic con el botón derecho y agregue
Project -> Web -> ASP.NET Web Application
(dirigido a .NET 4.6)3.1 Ahora, en las plantillas ASP.NET 4.5, elija Vacío como plantilla
3.2 Esto crea una solución en blanco con dos paquetes nuget:
Instale los siguientes paquetes:
Para OWIN:
Luego agregue Startup.cs con el método de configuración:
Ahora agregue una clase que herede
ApiController
, anótela con elRoutePrefix
atributo y el método de acción conRoute + HttpGet/PutPost
(que representa el verbo Http que está buscando) y debería estar listo para comenzarfuente
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
Una vez que agregué eso a mi API, pude eliminar el global.asax.Install-Package WebApiContrib.Formatting.Razor 2.3.0.0
muestra un error de paquete de instalación no encontrado. Conseguí la instalación de este paquete funcionandoInstall-Package WebApiContrib.Formatting.Razor 2.3.0
, así que sin el último.0[assembly:OwinStartup(typeof(namespace.Startup))]
parte debe estar por encima de la parte del espacio de nombres; de lo contrario, se produce el siguiente errorAssembly and module attributes must precede all other elements defined in a file except using clauses and extern alias declarations.
Esta es mi comprensión de cómo evolucionó el inicio / alojamiento de una aplicación web, ya que todo es bastante confuso de seguir. Un pequeño resumen:
1. ASP.NET clásico: escriba solo el código de la aplicación que se ejecutará en el último paso de la canalización obligatoria de IIS
2. ASP.NET con OWIN: configure un servidor web .NET y escriba el código de su aplicación. Ya no está directamente acoplado a IIS, por lo que ya no estás obligado a usarlo.
3. ASP.NET Core: configure el host y el servidor web para usar y escribir el código de su aplicación. Ya no es obligatorio usar un servidor web .NET si se dirige a .NET Core en lugar del .NET Framework completo.
Ahora entraré un poco más en detalles sobre cómo funciona y qué clases se utilizan para iniciar la aplicación:
ASP.NET clásico
Las aplicaciones ASP.NET clásicas tienen el
Global.asax
archivo como punto de entrada. Estas aplicaciones solo se pueden ejecutar en IIS y su código se ejecuta al final de la canalización de IIS (por lo que IIS es responsable de CORS, la autenticación ... incluso antes de que se ejecute su código). Desde IIS 7 puede ejecutar su aplicación en modo integrado que integra el tiempo de ejecución ASP.NET en IIS. Esto permite que su código configure la funcionalidad que antes no era posible (o solo en IIS), como la reescritura de URL en elApplication_Start
caso de suGlobal.asax
archivo o use la nueva<system.webserver>
sección en suweb.config
archivo.ASP.NET con OWIN
En primer lugar, OWIN no es una biblioteca, sino una especificación de cómo los servidores web .NET (por ejemplo, IIS) interactúan con las aplicaciones web. Microsoft tiene una implementación de OWIN llamada proyecto Katana (distribuida a través de varios paquetes NuGet diferentes). Esta implementación proporciona la
IAppBuilder
interfaz con la que se encuentra básicamente componiendo middleware de una manera plug-and-play para crear la tubería para el servidor web (además de solo la tubería ASP.NET en IIS7 + como en el punto anterior) en lugar de estar vinculado a la tubería de IIS (pero ahora usa un componente de middleware para CORS, un componente de middleware para autenticación ...). Debido a esto, su aplicación ya no está específicamente acoplada a IIS y puede ejecutarla en cualquier servidor web .NET, por ejemplo:Startup
clase y algunos componentes de middleware OWIN (OMC) proporcionados por Microsoft. UtilizandoIAppBuilder
Lo que hace que todo sea tan confuso es que
Global.asax
todavía se admite junto con laStartup
clase OWIN , mientras que ambos pueden hacer cosas similares. Por ejemplo, podría implementar CORSGlobal.asax
y la autenticación utilizando el middleware OWIN, lo que se vuelve realmente confuso.Mi regla general es eliminar el
Global.asax
archivo por completo a favor de usarloStartup
cada vez que necesite agregar OWIN.ASP.NET Core
ASP.NET Core es la próxima evolución y ahora puede apuntar a .NET Core o al .NET Framework completo. Cuando apunta a .NET Core, puede ejecutar su aplicación en cualquier host que admita el estándar .NET. Esto significa que ya no está restringido a un servidor web .NET (como en el punto anterior), sino que puede alojar su aplicación en contenedores Docker, un servidor web Linux, IIS ...
El punto de entrada para una aplicación web ASP.NET Core es el
Program.cs
archivo. Allí configura su host y nuevamente especifica suStartup
clase donde configura su canalización. El uso de OWIN (mediante elIAppBuilder.UseOwin
método de extensión) es opcional, pero totalmente compatible .fuente