Web API(RESTful)
阿新 • • 發佈:2018-12-22
特性
一個構建基於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型別
參考: