OWIN的介紹
OWIN 的全稱是 "Open Web Interface for .NET", OWIN 在 .NET Web 服務器和 .NET Web 應用之間定義了一套標准的接口, 其目的是為了實現服務器與應用之間的解耦,使得便攜式 .NET Web 應用以及跨平台的願望成為現實, 標准的 OWIN 應用可以在任何 OWIN 兼容的服務器上運行, 不再依賴於Windows和IIS 。
OWIN的使用
-
創建項目
-
向項目中添加Microsoft.AspNet.WebApi.Owin 和 Microsoft.AspNet.WebApi.Owin Self Host包(Self Host 用於開啟OWIN Host,設置監聽接受Http請求)
-
添加Startup類
Startup是OWIN約定的,用於對OWIN做相關配置的,代碼如下:
using Owin; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Http; namespace OwinTest { public class Startup { public void Configuration(IAppBuilder appBuilder) { // 創建 Web API 的配置 var config = new HttpConfiguration(); // 啟用標記路由 config.MapHttpAttributeRoutes(); // 默認的 Web API 路由 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); // 將路由配置附加到 appBuilder appBuilder.UseWebApi(config); } } }
-
新建Controllers文件夾,添加queryControllers類
按照 Web API 項目的約定,在項目中添加一個名稱為 Controllers 的文件夾,然后新建 一個queryController類,設置其基類為 System.Web.Http.ApiController ,作為示例,其內容與 Visual Studio 自帶的 Web API Controller 模板一致,包含4種請求方式(GET/POST/PUT/DELETE),用於演示,重寫GET方法(直接返回請求參數)和POST方法(接受實體類參數直接返回),queryController代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Http; namespace OwinTest.Controllers { public class queryController : ApiController { // GET api public string Get(string id) { return id; } // POST api public DeParams Post(DeParams dp) { return dp; } // PUT api public void Put(int id, string value) { } // DELETE api public void Delete(int id) { } } }
-
在Program.cs文件中的 Main 方法中添加OWIN啟動方法,代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using Microsoft.Owin.Hosting; namespace OwinTest { class Program { static void Main(string[] args) { string baseAddress = "http://localhost:9000/"; // Start OWIN host using (WebApp.Start<Startup>(url: baseAddress)) { HttpClient client = new HttpClient(); Console.WriteLine(baseAddress); Console.ReadLine(); } } } }
演示
-
啟動服務端程序
-
發送GET請求
DHC是一個測試HTTP/REST API的在線工具,https://www.sprintapi.com/dhcs.html,本地測試需在Google商店下載擴展插件。
同樣也可通過瀏覽器來直接發送GET請求,如下:
其中localhost:9000/api/query/ok 對應OWIN路由配置中的 routeTemplate: "api/{controller}/{id}"。
-
發送POST請求
指定請求內容格式為json
-
添加自定義請求
上述是針對API請求的路由規則(routeTemplate: "api/{controller}/{id}"),下面簡述在普通MVC頁面請求的路由規則(routeTemplate: "{controller}/{action}/{id}")下,自定義請求方式的方法。
-首先修改Startup中的路由規則,在{controller}后加{action},其后的{id}則會對應action中的參數。修改后的Startup如下:
-其次在之前的queryController類中添加自定義的方法,先聲明請求方式([HttpGet]、[HttpPost]、[HttpDelete]、[HttpPut]等方法特性),然后添加自定義方法,如下:
-演示
有些地方不夠詳細,我會后期補充,理解有誤的地方,還請各位批評指正。