聊聊asp.net中Web Api的使用

王磊的部落格發表於2016-07-01

扯淡

    隨著app應用的崛起,後端服務開發的也越來越多,除了很多優秀的nodejs框架之外,微軟當然也會在這個方面提供更便捷的開發方式。這是微軟一貫的作風,如果從開發的便捷性來說的話微軟是當之無愧的老大哥,只是魚和熊掌不能兼得,各種語法糖帶來開發的便利勢必會犧牲程式執行的效能,這是無可避免的,通用和效率永遠是需要程式設計師去取捨的話題。扯淡到這就完了,下來就聊聊今天的主角web api,web api 是mvc4.0之後出現的一種技術吧,他的建立和帶來的便利我就不介紹了。這邊文章主要聊聊,我對web api開發的一些理解。

 

話題一:[FromBody]特性修飾符

FromBody是一個修飾引數的特性,比如:public void Post([FromBody]string name),那麼他的作用是什麼呢,其實他的作用是查詢post請求中引數為name的值。

要注意的是:[FromBody]只能修飾單個引數,如果是多個引數的話,就要封裝成物件進行資料專遞了,比如:public void Post([FromBody]string name,[FromBody]int id)是取不到值的,要把id和name封裝成Userinfo物件,使用 public void Post([FromBody]Userinfo user)進行呼叫。

 

話題二:post傳遞多個不同物件的引數

已經post請求需要使用[FromBody]特性修飾符接收,但是FromBody只能接收單個引數,如果需要傳遞不同物件的輸出就比較麻煩了,新建實體物件成本太大,也不能完全適應適應的型別,這個時候需要使用JObject來處理,程式碼如下:

jQuery.post("/Api/Userinfo/Add/", {
    mobile: "18049579804",
    pwd: "123456",
    smsCode: "12346",
    t: new Date().getTime()
}, function (data) {
    if (data) {
        document.writeln(data);
    }
});
public string Add([FromBody]JObject pdata)
{
    string mobile = Convert.ToString(pdata["smsCode"]);
    string pwd = Convert.ToString(pdata["pwd"]);
    string smsCode = Convert.ToString(pdata["smsCode"]);
}

 

話題三:請求方式(Get & Post)

關鍵字區分:Get請求或者Post請求,可以用自身的關鍵字來區分,比如:GetUser(int id)肯定為get請求,Getxxx(params param)等格式為Get請求,post同理。當然還有一種方式,是沒有關鍵字修飾的方法,比如:FindUser這種情況下,這種請求下預設是Post請求的Get請求就會報405的錯。

 

話題四:返回json格式的結果

這個會簡單設定返回值為Net自帶的Json格式即可,可以返回JObject或JArray都是可以用ajax接收json物件的。程式碼如下:

public JObject PostFindUser([FromBody]Userinfo user)
{
    JObject res = new JObject();
    res["name"] = string.Format("{0}是好人~", user.Name);
    return res;
}

 

話題五:路由設定

本身的路由不是很好,需要設定WebApiConfig.cs配置為:控制/動作/引數

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{Action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

 

 

 題外話:webapi獲取http header資訊程式碼:Request.Headers.GetValues("xxx")

 

 

 

 

相關文章