1. 程式人生 > >Web API(RESTful)

Web API(RESTful)

特性

    一個構建基於restful服務的理想平臺。

    基於Asp.Net,支援ASP.Net 請求/響應管道

    有良好的路由機制。

    支援不同格式的響應資料。

    包括新的HttpClient。

 

建立空的工程

1、建立一個空的web工程 ASP.NET Web應用程式

2、右鍵-管理NuGet程式包-搜尋"web api"-安裝

3、建立App_Start檔案-建立類-更名為APIConfig-在類裡寫入如下程式碼

public static void Register(HttpConfiguration config)
{
    // Web API routes
    config.MapHttpAttributeRoutes();
​

    //config.Routes是一個集合,MapHttpRoute()在內部建立一個IHttpRoute例項,並將其新增到集合中。
    config.Routes.MapHttpRoute(
        name: "DefaultApi",//路由名稱,DefaultApi可以更改,但禁止重複
        routeTemplate: "AA/{controller}/{id}",//AA可以更改
        defaults: new { id = RouteParameter.Optional }
    );
}

4、建立全域性應用程式類-在Application_Start裡寫入如下程式碼

GlobalConfiguration.Configure(APIConfig.Register);//APIConfig是剛才的類名,Register是方法名

5、建立Controller檔案-建立Web API控制器-更名為indexController-在類裡寫入如下程式碼

// GET AA/index
public string Get(){ return "value"; }

​
// GET AA/index?id=1
public string Get(string id){ return id; }


// POST AA/index
public void Post([FromBody]string value){}

​
// PUT AA/index?id=1
public void Put(int id, [FromBody]string value){}


// DELETE AA/index?id=1
public void Delete(int id){}

6、建立一個頁面,用ajax請求路徑就可以了。

 

細節理解

//注意:如果想通過Get請求AA/index/names,可以在Get前面加Route。
//     則請求的時候,如果路徑是AA/index/names,則進入以下函式
[Route("AA/index/names")]
public string Get(){ return "value"; }

    剛才看到了[FromBody]不知道是幹什麼的,那我們先來看看引數的繫結的預設規則。預設情況下,Web API從查詢字串中得到基本型別引數的值,從請求主體中得到複雜型別引數的值。

HTTP方法 Query string Request Body
Get 簡單型別、複雜型別
Post 簡單型別 複雜型別
PUT 簡單型別 複雜型別
PATCH 簡單型別 複雜型別
DELETE 簡單型別、複雜型別

注:預設Post方法不能包含多個複雜型別的引數,因為最多允許一個引數讀取請求主體中的資料。

    如果我們要改變這種狀況,可以使用[FromUri]屬性,從查詢字串中獲取複雜型別的值;使用[FromBody]屬性,從主體獲取原始型別的值。

 

    返回值剛才見過void 和 簡單型別或複雜型別。其實還有兩種複雜的:HttpResponseMessage型別 和 IHttpActionResult型別
 

 

參考:

    http://www.yuanjiaocheng.net/webapi/first.html  Web API教程