在.net下,創建一個HTTP服務,有很多方案,比較老ashx,一般處理程序(HttpHandler),
Web Service
SOAP協議的,數據格式是XML,HTTP協議
WCF
基於SOAP的,數據格式是XML,可以支持各種各樣的協議,像TCP,HTTP,HTTPS,Named Pipes, MSMQ.
Web API(文章主講)
簡單的構建HTTP服務,.net平台上Web API 是一個開源的、理想的、構建REST-ful 服務的技術,支持MVC的特征,像路由、控制器、action、filter、模型綁定、控制反轉(IOC)或依賴注入(DI),單元測試。這些可以使程序更簡單、更健壯,說白了,Asp.net mvc 你會用,那么編寫webapi,構建http服務,也木有問題,輕量級的框架,並且對限制帶寬的設備,比如智能手機等支持的很好。
本人都自己編寫測試過webservice,wcf,webapi,但是由於工作中構建的服務多用於瀏覽器、手機等,也是.net平台上,所以對webapi的使用更多。當然使用的路上,發現遇到的”坑“也多,當然不是說webapi不好使,主要是自己不熟悉。
嘗試修改controller中的action名字,發現類post,get開頭的action-public void GetData1(string data),但是詭異的問題是當繼續再添加幾個action-public void GetData2(string data),public void GetData2(string data);
此時我的心情就是“日了狗了”明明就是兩個不同action,你他媽居然提示我“找到了與該請求匹配的多個操作”
還是太年輕,經驗太少,查閱了相關資料,
“ 微軟的web api是在vs2012上的mvc4項目綁定發行的,它提出的web api
是完全基於RESTful標准的,完全不同於之前的(同是SOAP協議的)wcf和webService,
它是簡單,代碼可讀性強的,上手快的,如果要拿它和web服務相比,我會說,它的接口
更標准,更清晰,沒有混亂的方法名稱,有的只有幾種標准的請求,如get,post,put,delete
等,它們分別對應的幾個操作,下面講一下:
GET:生到數據列表(默認),或者得到一條實體數據
POST:添加服務端添加一條記錄,記錄實體為Form對象
PUT:添加或修改服務端的一條記錄,記錄實體的Form對象,記錄主鍵以GET方式進行傳輸
DELETE:刪除 服務端的一條記錄
注意上面公開的API接口都是在XMLHttpRequest情況下調用的,當然你可以使用jquery的ajax組件
來完成這個請求調用,它的代碼更加面向對象.”
哦,原來如此,認識webapi是認識get,post,put,delete,(這是我猜的,測試下),再加一個action,test
找到了與該請求匹配的多個操作:
類型 Service.Controllers.EnterOrExitController 的 test
類型 Service.Controllers.EnterOrExitController 的 GetData
類型 Service.Controllers.EnterOrExitController 的 UploadData
好像是猜錯了,他好像才不管你action的名字,你發起httpget請求,他就把action里面的get全搞出來匹配,http-get-3個扔給你,哦,OMG,“我們找到了與該請求匹配的多個操作,你要哪一個?”,
既然是這樣,我需要在一個api控制器中寫多個action用以請求訪問咋辦呢,怎樣才能路由到指定的action,去完成http請求。
可能你也發現了,這份配置文件中:
routeTemplate: "api/{controller}/{id}",
他娘的根本沒有規定action,所以怎樣都匹配不到呢,人家是按照REST風格默認去找get,post,要想向asp.net mvc web中那樣請求,你只能修改為routeTemplate: "api/{controller}/{action}/{id}",