Detecção de classe de inicialização OWIN
Este tutorial mostra como configurar qual classe de inicialização OWIN é carregada. Para obter mais informações sobre o OWIN, consulte Uma visão geral do Projeto Katana. Este tutorial foi escrito por Rick Anderson ( @RickAndMSFT ), Praburaj Thiagarajan e Howard Dierking ( @howard_dierking ).
Pré-requisitos
Detecção de classe de inicialização OWIN
Cada aplicativo OWIN tem uma classe de inicialização em que você especifica componentes para o pipeline de aplicativo. Há diferentes maneiras de conectar sua classe de inicialização com o runtime, dependendo do modelo de hospedagem escolhido (OwinHost, IIS e IIS-Express). A classe de inicialização mostrada neste tutorial pode ser usada em todos os aplicativos de hospedagem. Você conecta a classe de inicialização com o runtime de hospedagem usando uma destas abordagens:
Convenção de Nomenclatura: Katana procura uma classe chamada
Startup
no namespace que corresponda ao nome do assembly ou ao namespace global.Atributo OwinStartup: essa é a abordagem que a maioria dos desenvolvedores adotará para especificar a classe de inicialização. O atributo a seguir definirá a classe de inicialização como a
TestStartup
classe noStartupDemo
namespace.[assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
O
OwinStartup
atributo substitui a convenção de nomenclatura. Você também pode especificar um nome amigável com esse atributo, no entanto, usar um nome amigável exige que você também use oappSetting
elemento no arquivo de configuração.O elemento appSetting no arquivo de configuração: o
appSetting
elemento substitui o atributo e aOwinStartup
convenção de nomenclatura. Você pode ter várias classes de inicialização (cada uma usando umOwinStartup
atributo) e configurar qual classe de inicialização será carregada em um arquivo de configuração usando marcação semelhante à seguinte:<appSettings> <add key="owin:appStartup" value="StartupDemo.ProductionStartup" /> </appSettings>
A seguinte chave, que especifica explicitamente a classe de inicialização e o assembly também podem ser usados:
<add key="owin:appStartup" value="StartupDemo.ProductionStartup, StartupDemo" />
O XML a seguir no arquivo de configuração especifica um nome de classe de inicialização amigável de
ProductionConfiguration
.<appSettings> <add key="owin:appStartup" value="ProductionConfiguration" /> </appSettings>
A marcação acima deve ser usada com o atributo a seguir
OwinStartup
, que especifica um nome amigável e faz com que aProductionStartup2
classe seja executada.[assembly: OwinStartup("ProductionConfiguration", typeof(StartupDemo.ProductionStartup2))] namespace StartupDemo { public class ProductionStartup { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " Production OWIN App"); }); } } public class ProductionStartup2 { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " 2nd Production OWIN App"); }); } } }
Para desabilitar a descoberta de inicialização OWIN, adicione o
appSetting owin:AutomaticAppStartup
com um valor de"false"
no arquivo web.config.<add key="owin:AutomaticAppStartup" value="false" />
Criar um aplicativo Web ASP.NET usando a inicialização OWIN
Crie um aplicativo Web Asp.Net vazio e nomeie-o como StartupDemo. – Instale
Microsoft.Owin.Host.SystemWeb
usando o gerenciador de pacotes NuGet. No menu Ferramentas , selecione Gerenciador de Pacotes NuGet e Console do Gerenciador de Pacotes. Digite o seguinte comando:Install-Package Microsoft.Owin.Host.SystemWeb
Adicione uma classe de inicialização OWIN. No Visual Studio 2017, clique com o botão direito do mouse no projeto e selecione Adicionar Classe.- Na caixa de diálogo Adicionar Novo Item , insira OWIN no campo de pesquisa e altere o nome para Startup.cs e selecione Adicionar.
Na próxima vez que você quiser adicionar uma classe de Inicialização Owin, ela estará disponível no menu Adicionar .
Como alternativa, você pode clicar com o botão direito do mouse no projeto e selecionar Adicionar, selecionar Novo Item e, em seguida, selecionar a classe Inicialização Owin.
Substitua o código gerado no arquivo Startup.cs pelo seguinte:
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; using System.IO; //[assembly: OwinStartup(typeof(StartupDemo.Startup))] namespace StartupDemo { public class Startup { public void Configuration(IAppBuilder app) { app.Use((context, next) => { TextWriter output = context.Get<TextWriter>("host.TraceOutput"); return next().ContinueWith(result => { output.WriteLine("Scheme {0} : Method {1} : Path {2} : MS {3}", context.Request.Scheme, context.Request.Method, context.Request.Path, getTime()); }); }); app.Run(async context => { await context.Response.WriteAsync(getTime() + " My First OWIN App"); }); } string getTime() { return DateTime.Now.Millisecond.ToString(); } } }
A
app.Use
expressão lambda é usada para registrar o componente de middleware especificado no pipeline OWIN. Nesse caso, estamos configurando o registro em log de solicitações de entrada antes de responder à solicitação de entrada. Onext
parâmetro é o delegado (Tarefa>Func< ) para o próximo componente no pipeline. Aapp.Run
expressão lambda conecta o pipeline a solicitações de entrada e fornece o mecanismo de resposta.Observação
No código acima, comentamos o
OwinStartup
atributo e estamos contando com a convenção de executar a classe chamadaStartup
.- Pressione F5 para executar o aplicativo. Clique em Atualizar algumas vezes.Observação: o número mostrado nas imagens neste tutorial não corresponderá ao número que você vê. A cadeia de caracteres de milissegundo é usada para mostrar uma nova resposta quando você atualiza a página. Você pode ver as informações de rastreamento na janela Saída .
Adicionar mais classes de inicialização
Nesta seção, adicionaremos outra classe startup. Você pode adicionar várias classes de inicialização OWIN ao seu aplicativo. Por exemplo, talvez você queira criar classes de inicialização para desenvolvimento, teste e produção.
Crie uma nova classe de inicialização OWIN e nomeie-a
ProductionStartup
como .Substitua o código gerado pelo seguinte:
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; [assembly: OwinStartup(typeof(StartupDemo.ProductionStartup))] namespace StartupDemo { public class ProductionStartup { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " Production OWIN App"); }); } } }
Pressione Control F5 para executar o aplicativo. O
OwinStartup
atributo especifica que a classe de inicialização de produção é executada.Crie outra classe de inicialização OWIN e nomeie-a
TestStartup
como .Substitua o código gerado pelo seguinte:
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; [assembly: OwinStartup("TestingConfiguration", typeof(StartupDemo.TestStartup))] namespace StartupDemo { public class TestStartup { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " Test OWIN App"); }); } } }
A
OwinStartup
sobrecarga de atributo acima especificaTestingConfiguration
como o nome amigável da classe Startup.Abra o arquivo web.config e adicione a chave de inicialização do Aplicativo OWIN que especifica o nome amigável da classe Startup:
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="owin:appStartup" value="TestingConfiguration" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> </system.web> </configuration>
Pressione Control F5 para executar o aplicativo. O elemento de configurações do aplicativo tem precedentes e a configuração de teste é executada.
Remova o nome amigável do
OwinStartup
atributo naTestStartup
classe .[assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
Substitua a chave de inicialização do aplicativo OWIN no arquivo web.config pelo seguinte:
<add key="owin:appStartup" value="StartupDemo.TestStartup" />
Reverta o
OwinStartup
atributo em cada classe para o código de atributo padrão gerado pelo Visual Studio:[assembly: OwinStartup(typeof(StartupDemo.Startup))] [assembly: OwinStartup(typeof(StartupDemo.ProductionStartup))] [assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
Cada uma das chaves de inicialização do Aplicativo OWIN abaixo fará com que a classe de produção seja executada.
<add key="owin:appStartup" value="StartupDemo.ProductionStartup" /> <add key="owin:appStartup" value="StartupDemo.ProductionStartup, StartupDemo" /> <add key="owin:appStartup" value="StartupDemo.ProductionStartup.Configuration, StartupDemo" />
A última chave de inicialização especifica o método de configuração de inicialização. A seguinte chave de inicialização do aplicativo OWIN permite que você altere o nome da classe de configuração para
MyConfiguration
.<add key="owin:appStartup" value="StartupDemo.ProductionStartup2.MyConfiguration" />
Usando Owinhost.exe
Substitua o arquivo Web.config pela seguinte marcação:
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="owin:appStartup" value="StartupDemo.Startup" /> <add key="owin:appStartup" value="StartupDemo.TestStartup" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> </system.web> </configuration>
A última chave vence, portanto, nesse caso
TestStartup
, é especificado.Instale o Owinhost do PMC:
Install-Package OwinHost
Navegue até a pasta do aplicativo (a pasta que contém o arquivo Web.config ) e em um prompt de comando e digite:
..\packages\Owinhost<Version>\tools\Owinhost.exe
A janela de comando mostrará:
C:\StartupDemo\StartupDemo>..\packages\OwinHost.2.0.0\tools\Owin Host.exe Starting with the default port: 5000 (http://localhost:5000/) Started successfully Press Enter to exit
Inicie um navegador com a URL
http://localhost:5000/
.OwinHost homenageou as convenções de inicialização listadas acima.
Na janela de comando, pressione Enter para sair do OwinHost.
ProductionStartup
Na classe , adicione o seguinte atributo OwinStartup que especifica um nome amigável de ProductionConfiguration.[assembly: OwinStartup("ProductionConfiguration", typeof(StartupDemo.ProductionStartup))]
No prompt de comando e digite:
..\packages\OwinHost.2.0.0\tools\OwinHost.exe ProductionConfiguration
A classe de inicialização De produção é carregada.
Nosso aplicativo tem várias classes de inicialização e, neste exemplo, adiamos qual classe de inicialização carregar até o runtime.
Teste as seguintes opções de inicialização de runtime:
..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe StartupDemo.TestStartup ..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe "StartupDemo.TestStartup,StartupDemo" ..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe StartupDemo.TestStartup.Configuration ..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe "StartupDemo.TestStartup.Configuration,StartupDemo"
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de