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]等方法特性),然后添加自定義方法,如下:

-演示

有些地方不夠詳細,我會后期補充,理解有誤的地方,還請各位批評指正。


