owin使用


OWIN的英文全稱是Open Web Interface for .NET。

如果僅從名稱上解析,可以得出這樣的信息:OWIN是針對.NET平台的開放Web接口。

那Web接口是誰和誰之間的接口呢?是Web應用程序與Web服務器之間的接口,OWIN就是.NET Web應用程序與Web服務器之間的接口。

為什么需要這樣一個接口呢?因為.NET Web應用程序是運行於Web服務器之中的,.NET Web應用程序需要通過Web服務器接收用戶的請求,並且通過Web服務器將響應內容發送用戶。如果沒有這樣一個接口,.NET Web應用程序就要依賴於所運行的具體Web服務器,比如ASP.NET應用程序要依賴於IIS。有了這個接口,ASP.NET應用程序只需依賴這個抽象接口,不用關心所運行的Web服務器。

所以,OWIN的作用就是通過引入一組抽象接口,解耦了.NET Web應用程序與Web服務器,再次體現了接口的重要性。在軟件開發中,每次解耦都是一次很大的進步。

【進一步的理解】

OWIN是對ASP.NET Runtime的抽象。

ASP.NET 5.0是OWIN的一種實現。

通過下面幾張圖可以更直觀地理解:

 

OWIN

 

OWIN

 

 

了解了一些基礎理論,下面我們來實際開發。

 

OWIN Self-Host ASP.NET Web API 2

首先我們創建一個空的控制台項目:

 

然后通過Nuget來安裝 Microsoft.AspNet.WebApi.OwinSelfHost

我們也可以打開NuGet控制台..輸入命令:Install-Package Microsoft.AspNet.WebApi.OwinSelfHost

 

然后我們再添加一個OWIN啟動類名為Startup 如下:

 

 

 

Startup中編寫代碼如下:

 

復制代碼
using Owin; using System; using System.Web.Http; namespace OwinBlog { public class Startup { public void Configuration(IAppBuilder appBuilder) { HttpConfiguration config = new HttpConfiguration(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); appBuilder.UseWebApi(config); } } }
復制代碼

 

下面我們編寫一個WebAPI的控制器,代碼如下:

復制代碼
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; namespace OwinBlog { public class BlogController : ApiController { // GET api/<controller> public IEnumerable<string> Get() { return new string[] { "linezero", "owin linezero blog" }; } // GET api/<controller>/5 public string Get(int id) { return string.Format("owin {0} by:linezero",id); } // POST api/<controller> public void Post([FromBody]string value) { } // PUT api/<controller>/5 public void Put(int id, [FromBody]string value) { } // DELETE api/<controller>/5 public void Delete(int id) { } } }
復制代碼

 

最后我們啟動OWIN,在Program.cs 加入以下代碼:

復制代碼
using Microsoft.Owin.Hosting; using System; namespace OwinBlog { class Program { static void Main(string[] args) { string baseAddress = "http://localhost:9000/"; //string baseAddress = "http://+:9000/"; //綁定所有地址,外網可以用ip訪問 需管理員權限 // 啟動 OWIN host WebApp.Start<Startup>(url: baseAddress); Console.WriteLine("程序已啟動,按任意鍵退出"); Console.ReadLine(); } } }
復制代碼

 

 

啟動控制台程序,然后訪問我們剛才設置的地址:

http://localhost:9000/api/blog

http://localhost:9000/api/blog/88

 

 

跨平台

 通過OWIN宿主ASP.NET WebAPI還可以完美的兼容Mono 3 及以上版本。

下面我們就來看看一下運行在linux下。首先大家要安裝好 mono。

可以參考:http://www.cnblogs.com/linezero/p/4774850.html

測試系統版本:centos 6.4  mono 3.10.0

 

將OWIN 啟動綁定改為綁定所有地址,然后編譯。代碼如下:

復制代碼
using Microsoft.Owin.Hosting; using System; namespace OwinBlog { class Program { static void Main(string[] args) { string baseAddress = "http://+:9000/"; //綁定所有地址,外網可以用ip訪問 // 啟動 OWIN host WebApp.Start<Startup>(url: baseAddress); Console.WriteLine("程序已啟動,按任意鍵退出"); Console.ReadLine(); } } }
復制代碼

 

將程序上傳到linux 下,然后定位到程序目錄,通過命令啟動程序:mono OwinBlog.exe

程序已成功啟動,下面我來訪問看看:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM