標籤:
OWIN全稱是Open Web Interface for .NET,是針對.NET平台的開放Web介面。
有了OWIN,就可以讓ASP.NET 脫離IIS,不用再去關心Web伺服器的事情,這一點在ASP.NET Web API測試中特別方便,當然除了使用OWIN託管,還可以使用記憶體託管。
那麼怎麼使用OWIN託管?
0.建立ASP.NET Web API 2項目
ASP.NEt Web API 2出現這麼久,除了舊項目,相信不會有人還使用第一版本了吧。我曾經嘗試過在老項目添加OWIN託管,特別麻煩各種程式集不相容,到最後也沒成功。所以,不知道OWIN是不是不支援第一版本的API還是別的原因,如果要使用OWIN,建議升級到新版本的API再說。
因為使用OWIN主要是方便單元測試,所是建立項目的時候把”添加單元測試“勾上。
1.添加OWIN引用和Startup.cs開機檔案
用nuget添加owin的引用(IAppBuilder在這裡):
PM>Install-Package Owin
然後在項目添加Startup.cs:
using System.Web.Http;using Owin;namespace OwinHost{ public class Startup { public void Configuration(IAppBuilder appBuilder) { var config=new HttpConfiguration(); WebApiConfig.Register(config); appBuilder.UseWebApi(config); } }}
接著再用nuget添加 Microsoft.AspNet.WebApi.Owin(UseWebApi擴充方法在這裡)
PM>Install-Package Microsoft.AspNet.WebApi.Owin
使用nuget添加引用時,如果依賴的程式集版本不相容,nuget會一併更新引用。
到這裡,API項目添加OWIN已經完成,下面開始在單元測試中啟動它。
2.在單元測試中啟用項目
啟動OWIN託管前,還要在測試專案引入Microsoft.Owin.Hosting(WebApp.Start方法在這裡)和Microsoft.Owin.Host.HttpListener
PM> Install-Package Microsoft.Owin.HostingPM> Install-Package Microsoft.Owin.Host.HttpListener
引用完後添加啟動測試代碼
namespace OwinHost.Tests{ [TestClass] public class OwinHostStartTests:IDisposable { private const string HostAddress = "http://localhost:9000"; private static IDisposable _webApp; private static HttpClient _client;
public OwinHostStartTests() { _webApp = WebApp.Start<Startup>(HostAddress); _client=new HttpClient(); _client.BaseAddress=new Uri(HostAddress); } [TestMethod] public void StartTest() { var response = _client.GetAsync("api/values").Result; Assert.AreEqual(HttpStatusCode.OK,response.StatusCode); Assert.AreEqual("value1",response.Content.ReadAsAsync<List<string>>().Result.ElementAt(0)); } public void Dispose() { _webApp.Dispose(); } }}
結果是順利通過了
就這麼簡單的幾步,很方便地添加了OWIN託管,極大的方便了測試,完全實現了一鍵運行測試,不用關心IIS。
3.可能遇到的問題
使用過程中,有可能會有某些程式集依賴版本不相容問題,直接用nuget升級程式包就好了。
4.小結
添加OWIN託管不會對項目有任何副作用,更不會影響IIS部署,所以儘管放心服用。當然OWIN也直接託管ASP.NET也是沒問題的,現在已經有非常完善的組件支援了,可以作為IIS替代方案。
使用OWIN託管ASP.NET Web API 2