【C#】使用OWIN創建Web API


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

-演示


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

 

 
 


免責聲明!

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



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