【WebApi】(一)Asp.net web api中的坑-【找不到與請求 URI匹配的 HTTP 資源】


    在.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不好使,主要是自己不熟悉。

 

  1.    Web Api坑之“我他媽寫的action,請求咋就進不來,還提示我找不到與請求 URI匹配的 HTTP 資源”

    TIM截圖20170707104956

      

嘗試修改controller中的action名字,發現類post,get開頭的action-public void GetData1(string data),但是詭異的問題是當繼續再添加幾個action-public void GetData2(string data),public void GetData2(string data);TIM截圖20170707112306

此時我的心情就是“日了狗了”明明就是兩個不同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

image

再請求,image

找到了與該請求匹配的多個操作:
類型 Service.Controllers.EnterOrExitController 的 test
類型 Service.Controllers.EnterOrExitController 的 GetData
類型 Service.Controllers.EnterOrExitController 的 UploadData

好像是猜錯了,他好像才不管你action的名字,你發起httpget請求,他就把action里面的get全搞出來匹配,http-get-3個扔給你,哦,OMG,“我們找到了與該請求匹配的多個操作,你要哪一個?”,

 既然是這樣,我需要在一個api控制器中寫多個action用以請求訪問咋辦呢,怎樣才能路由到指定的action,去完成http請求。

答案,就是改路由的配置文件,image

 

   可能你也發現了,這份配置文件中:

routeTemplate: "api/{controller}/{id}",

   他娘的根本沒有規定action,所以怎樣都匹配不到呢,人家是按照REST風格默認去找get,post,要想向asp.net mvc web中那樣請求,你只能修改為routeTemplate: "api/{controller}/{action}/{id}",


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM