扯淡
隨着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")