Digamos, por exemplo, em um novo aplicativo ASP.NET MVC 5 criado a partir do modelo MVC com contas individuais, se eu excluir a Global.asax.cs
classe e mover o código de configuração para o Startup.cs
Configuration()
método a seguir, quais são as desvantagens?
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);
}
}
A vantagem para mim é que, ao atualizar aplicativos ASP.NET 4 para o ASP.NET 5 e usar peças que agora precisam ser configuradas na classe Startup.cs, não estou fazendo injeção de dependência e outras configurações em duas classes diferentes que parecem relacionadas para iniciar e configuração.
c#
asp.net
asp.net-mvc
asp.net-mvc-5
owin
iliketocode
fonte
fonte
AreaRegistration.RegisterAllAreas();
Causou um erro para mim, pois esse método não pode ser usado durante a inicialização como esta, apenas emApplication_Start
. No entanto, meu aplicativo é uma API e esse método aparentemente é útil apenas para aplicativos MVC: stackoverflow.com/questions/18404637/…Respostas:
A configuração Startup.Configuration é chamada um pouco depois do Application_Start, mas não acho que a diferença seja muito importante na maioria dos casos.
Acredito que os principais motivos pelos quais mantivemos o outro código no Global.asax são:
Acho que o terceiro motivo é o mais importante: não adotamos essa abordagem por padrão, já que alguns cenários não incluem essa DLL e é bom poder alterar as abordagens de autenticação sem invalidar o local onde o código não relacionado (como registro de rota) é colocado.
Mas se nenhum desses motivos se aplicar ao seu cenário, acho que você ficaria bem em usar essa abordagem.
fonte
WebApi.Owin
um pacote nuget. Eu esperava erroneamente que a dependência incluísse tudo para executar no IIS. Não faço ideia por que pensei que, desde que eu queria que uma inicialização do Owin dissociasse a dependência do IIS em primeiro lugar.Para quem procura as etapas completas: Se você deseja criar uma API da Web hospedada no IIS, baseada em OWIN, essas etapas devem levá-lo até lá:
File -> New -> Project
Installed -> templates -> Other Project types -> Visual Studio Solutions -> Blank Solution targeting .NET 4.6
Na solução, clique com o botão direito do mouse em adicionar
Project -> Web -> ASP.NET Web Application
(direcionando-se ao .NET 4.6)3.1 Agora nos modelos do ASP.NET 4.5, escolha Vazio como modelo
3.2 Isso cria uma solução em branco com dois pacotes de nuget:
Instale os seguintes pacotes:
Para OWIN:
Em seguida, adicione Startup.cs com o método de configuração:
Agora adicione uma classe que herda de
ApiController
, anote-a comRoutePrefix
atributo e o método de ação comRoute + HttpGet/PutPost
(representando o verbo Http que você procura) e você deve estar prontofonte
Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
Depois de adicionar isso à minha API, pude excluir o global.asax.Install-Package WebApiContrib.Formatting.Razor 2.3.0.0
mostra um erro de pacote de instalação não encontrado. A instalação deste pacote está funcionandoInstall-Package WebApiContrib.Formatting.Razor 2.3.0
, portanto, sem o last.0.[assembly:OwinStartup(typeof(namespace.Startup))]
peça deve estar acima da parte namespace caso contrário ele dá o seguinte erroAssembly and module attributes must precede all other elements defined in a file except using clauses and extern alias declarations.
Este é o meu entendimento de como o início / hospedagem de um aplicativo Web evoluiu, pois é bastante confuso para seguir. Um pequeno resumo:
1. ASP.NET clássico: escreva apenas o código do aplicativo a ser executado na última etapa do pipeline obrigatório do IIS
2. ASP.NET com OWIN: configure um servidor da Web .NET e escreva o código do aplicativo. Como não está mais diretamente associado ao IIS, não é mais necessário usá-lo.
3. ASP.NET Core: configure o host e o servidor da web para usar e escrever o código do aplicativo. Não é mais obrigatório usar um servidor da Web .NET se você segmentar o .NET Core em vez do .NET Framework completo.
Agora, vou detalhar um pouco mais como ele funciona e quais classes são usadas para iniciar o aplicativo:
ASP.NET clássico
Aplicativos clássicos do ASP.NET têm o
Global.asax
arquivo como ponto de entrada. Esses aplicativos podem ser executados apenas no IIS e seu código é executado no final do pipeline do IIS (portanto, o IIS é responsável pelo CORS, pela autenticação ... antes mesmo que o seu código seja executado). Desde o IIS 7, você pode executar seu aplicativo no modo integrado, que integra o tempo de execução do ASP.NET ao IIS. Isso permite que seu código configure funcionalidades que antes não eram possíveis (ou apenas no IIS), como a reescrita de URL noApplication_Start
caso do seuGlobal.asax
arquivo ou use a nova<system.webserver>
seção doweb.config
arquivo.ASP.NET com OWIN
Antes de tudo, o OWIN não é uma biblioteca, mas uma especificação de como os servidores da Web .NET (por exemplo, IIS) interagem com os aplicativos da Web. A própria Microsoft possui uma implementação do OWIN chamada projeto Katana (distribuída por vários pacotes NuGet diferentes). Essa implementação fornece a
IAppBuilder
interface que você encontra em umaStartup
classe e alguns OMCs (componentes de middleware) fornecidos pela Microsoft. UsandoIAppBuilder
você basicamente compõe o middleware de forma plug-and-play para criar o pipeline para o servidor da Web (além do pipeline do ASP.NET no IIS7 +, como no ponto acima), em vez de estar vinculado ao pipeline do IIS (mas agora você usa um componente de middleware para CORS, um componente de middleware para autenticação ...). Por esse motivo, seu aplicativo não está mais associado especificamente ao IIS e você pode executá-lo em qualquer servidor Web .NET, por exemplo:O que torna tudo tão confuso é que
Global.asax
ainda é suportado junto com aStartup
classe OWIN , enquanto ambos podem fazer coisas semelhantes. Por exemplo, você pode implementar o CORSGlobal.asax
e a autenticação usando o middleware OWIN, o que se torna realmente confuso.Minha regra geral é remover o
Global.asax
arquivo em geral, em favor do usoStartup
sempre que eu precisar adicionar o OWIN.ASP.NET Core
O ASP.NET Core é a próxima evolução e agora você pode segmentar o .NET Core ou o .NET Framework completo. Ao direcionar o .NET Core, você pode executar seu aplicativo em qualquer host que suporte o .NET Standard. Isso significa que você não está mais restrito a um servidor web .NET (como no ponto anterior), mas pode hospedar seu aplicativo em contêineres Docker, um servidor web linux, IIS ...
O ponto de entrada para um aplicativo Web ASP.NET Core é o
Program.cs
arquivo. Lá você configura seu host e especifica novamente suaStartup
classe onde você configura seu pipeline. O uso do OWIN (usando oIAppBuilder.UseOwin
método de extensão) é opcional, mas é totalmente suportado .fonte