OWIN 啟動類別偵測
本教學課程說明如何設定載入哪個 OWIN 啟動類別。 如需 OWIN 的詳細資訊,請參閱 Project Katana 概觀。 本教學課程是由 Rick Anderson ( @RickAndMSFT ) 、Prabu) 和 Howard Dierking ( @howard_dierking ) 所撰寫。
必要條件
OWIN 啟動類別偵測
每個 OWIN 應用程式都有一個啟動類別,您可以在其中指定應用程式管線的元件。 根據您選擇的裝載模型,您可以使用不同的方式將啟動類別與執行時間連線, (OwinHost、IIS 和 IIS-Express) 。 本教學課程中顯示的啟動類別可用於每個裝載應用程式。 您可以使用下列其中一種方法,將啟動類別與裝載執行時間連線:
命名慣例:在命名空間中尋找名為
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.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(); } } }
app.Use
Lambda 運算式可用來向 OWIN 管線註冊指定的中介軟體元件。 在此情況下,我們會先設定傳入要求的記錄,再回應傳入要求。 參數next
是管線中下一個元件的委派 ( Func<Task> ) 。app.Run
Lambda 運算式會將管線連結至傳入要求,並提供回應機制。注意
在上述程式碼中,我們已將 屬性批註化
OwinStartup
,並依賴執行名為 的Startup
類別慣例。- 按 F5 來執行應用程式。 按幾次重新整理。注意:本教學課程中影像中顯示的數位與您看到的數位不符。 當您重新整理頁面時,會使用毫秒字串來顯示新的回應。 您可以在 [ 輸出 ] 視窗中看到追蹤資訊。
新增更多啟動類別
在本節中,我們將新增另一個 Startup 類別。 您可以將多個 OWIN 啟動類別新增至您的應用程式。 例如,您可能想要建立用於開發、測試和生產環境的啟動類別。
建立新的 OWIN 啟動類別,並將其命名為
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 啟動類別,並將其命名為
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 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應