OWIN 启动类检测
本教程演示如何配置加载的 OWIN 启动类。 有关 OWIN 的详细信息,请参阅 Project Katana 概述。 本教程由 Rick Anderson ( @RickAndMSFT ) 、Praburaj Thiagarajan 和 Howard Dierking ( @howard_dierking ) 编写。
先决条件
OWIN 启动类检测
每个 OWIN 应用程序都有一个启动类,可在其中指定应用程序管道的组件。 可以通过不同的方式将启动类与运行时连接,具体取决于你选择的托管模型 (OwinHost、IIS 和 IIS-Express) 。 本教程中显示的启动类可用于每个托管应用程序。 使用以下方法之一将启动类与托管运行时连接:
命名约定:Katana 在与程序集名称
Startup
或全局命名空间匹配的命名空间中查找名为 的类。OwinStartup 属性:这是大多数开发人员用于指定启动类的方法。 以下属性会将启动类设置为
TestStartup
命名空间中的StartupDemo
类。[assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
属性
OwinStartup
将替代命名约定。 还可以使用此属性指定友好名称,但是,使用友好名称还需要在appSetting
配置文件中使用 元素。配置文件中的 appSetting 元素:元素
appSetting
将替代OwinStartup
属性和命名约定。 可以使用属性) 将多个启动类 (每个OwinStartup
启动类,并使用如下所示的标记配置将在配置文件中加载哪个启动类:<appSettings> <add key="owin:appStartup" value="StartupDemo.ProductionStartup" /> </appSettings>
还可以使用以下键,它显式指定启动类和程序集:
<add key="owin:appStartup" value="StartupDemo.ProductionStartup, StartupDemo" />
配置文件中的以下 XML 指定友好的启动类名称
ProductionConfiguration
。<appSettings> <add key="owin:appStartup" value="ProductionConfiguration" /> </appSettings>
上述标记必须与以下
OwinStartup
属性一起使用,该属性指定友好名称并导致ProductionStartup2
类运行。[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"); }); } } }
若要禁用 OWIN 启动发现,
appSetting owin:AutomaticAppStartup
请在 web.config 文件中添加值为"false"
的 。<add key="owin:AutomaticAppStartup" value="false" />
使用 OWIN 启动创建 ASP.NET Web 应用
创建一个空 Asp.Net Web 应用程序并将其命名为 StartupDemo。 - 使用 NuGet 包管理器进行安装
Microsoft.Owin.Host.SystemWeb
。 在 “工具 ”菜单中,选择“ NuGet 包管理器”,然后选择“ 包管理器控制台”。 输入以下命令:Install-Package Microsoft.Owin.Host.SystemWeb
添加 OWIN 启动类。 在 Visual Studio 2017 中,右键单击项目并选择“ 添加类”。- 在“ 添加新项 ”对话框中,在搜索字段中输入 OWIN ,并将名称更改为 Startup.cs,然后选择“ 添加”。
下次要添加 Owin Startup 类时,它将在 “添加 ”菜单中可用。
或者,可以右键单击项目,选择“ 添加”,然后选择“ 新建项”,然后选择 “Owin Startup”类。
将 Startup.cs 文件中生成的代码替换为以下内容:
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(); } } }
lambda
app.Use
表达式用于将指定的中间件组件注册到 OWIN 管道。 在这种情况下,我们将在响应传入请求之前设置传入请求的日志记录。 参数next
是 ( Func<Task> ) 到管道中下一个组件的委托。app.Run
lambda 表达式将管道与传入请求挂钩,并提供响应机制。注意
在上面的代码中,我们已注释掉
OwinStartup
属性,并依赖于运行名为Startup
的类的约定。- 按 F5 运行应用程序。 点击刷新几次。注意:本教程中图像中显示的数字与你看到的数字不匹配。 毫秒字符串用于显示刷新页面时的新响应。 可以在“ 输出 ”窗口中查看跟踪信息。
添加更多启动类
在本部分中,我们将添加另一个 Startup 类。 可以将多个 OWIN 启动类添加到应用程序。 例如,你可能想要创建用于开发、测试和生产的启动类。
创建新的 OWIN Startup 类并将其命名为
ProductionStartup
。将生成的代码替换为以下代码:
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"); }); } } }
按 Control F5 运行应用。 特性
OwinStartup
指定生产启动类的运行。创建另一个 OWIN Startup 类并将其命名为
TestStartup
。将生成的代码替换为以下代码:
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"); }); } } }
上面的
OwinStartup
属性重载指定TestingConfiguration
为 Startup 类的 友好 名称。打开 web.config 文件并添加 OWIN 应用启动密钥,该密钥指定 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>
按 Control F5 运行应用。 应用设置元素采用先例,并运行测试配置。
从 类中的
OwinStartup
TestStartup
属性中删除友好名称。[assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
将 web.config 文件中的 OWIN 应用启动密钥替换为以下内容:
<add key="owin:appStartup" value="StartupDemo.TestStartup" />
将
OwinStartup
每个类中的属性还原为 Visual Studio 生成的默认属性代码:[assembly: OwinStartup(typeof(StartupDemo.Startup))] [assembly: OwinStartup(typeof(StartupDemo.ProductionStartup))] [assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
下面的每个 OWIN 应用启动密钥都将导致生产类运行。
<add key="owin:appStartup" value="StartupDemo.ProductionStartup" /> <add key="owin:appStartup" value="StartupDemo.ProductionStartup, StartupDemo" /> <add key="owin:appStartup" value="StartupDemo.ProductionStartup.Configuration, StartupDemo" />
最后一个启动键指定启动配置方法。 通过以下 OWIN 应用启动密钥,可以将配置类的名称更改为
MyConfiguration
。<add key="owin:appStartup" value="StartupDemo.ProductionStartup2.MyConfiguration" />
使用 Owinhost.exe
将 Web.config 文件替换为以下标记:
<?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>
最后一个键获胜,因此在本例
TestStartup
中指定。从 PMC 安装 Owinhost:
Install-Package OwinHost
导航到应用程序文件夹, (包含 Web.config 文件的文件夹) ,并在命令提示符下键入:
..\packages\Owinhost<Version>\tools\Owinhost.exe
命令窗口将显示:
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
使用 URL
http://localhost:5000/
启动浏览器。OwinHost 遵守上面列出的启动约定。
在命令窗口中,按 Enter 退出 OwinHost。
在 类中
ProductionStartup
,添加以下 OwinStartup 属性,该属性指定一个友好名称 ProductionConfiguration。[assembly: OwinStartup("ProductionConfiguration", typeof(StartupDemo.ProductionStartup))]
在命令提示符下键入:
..\packages\OwinHost.2.0.0\tools\OwinHost.exe ProductionConfiguration
将加载生产启动类。
我们的应用程序有多个启动类,在此示例中,我们将要加载的启动类推迟到运行时。
测试以下运行时启动选项:
..\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"
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈