2012-07-11 84 views
1

我正在開發一個使用ASP.Net Web API的應用程序並配置應用程序路由,我遵循this方法。但在我的應用程序中,我想要的網址如下所示。 「http:// localhost/MY/api/user/AllGridData/false/1342006446883/10/1/Id/desc」如何在ASP.Net中正確路由WebAPI

我在瀏覽器窗口中手動輸入了這個URL,並且觸發了AllGridData方法。但是當我從應用程序訪問它時,它會嘗試像下面那樣訪問URL。 「HTTP://本地主機/ MY/API /用戶/ AllGridData _search =假& ND = 1342006446883個&行= 10 &頁= 1 & SIDX =編號& SORD = desc」 的

所以那麼AllGridData方法是由於以下例外情況未被解僱。 無法加載資源:服務器響應狀態爲400(錯誤請求)「http:// localhost/MY/api/user/AllGridData?_search = false & nd = 1342006446883 & rows = 10 & page = 1 & sidx = Id & sord = desc「

我在RouterConfig.cs中爲此URL進行路由就是這樣的。

routes.MapHttpRoute(
      name: "LoadGridApi", 
      routeTemplate: "api/{controller}/{action}/{_search}/{nd}/{rows}/{page}/{sidx}/{sord}", 
      defaults: new { _search = UrlParameter.Optional, nd = UrlParameter.Optional, rows = UrlParameter.Optional, page = UrlParameter.Optional, sidx = UrlParameter.Optional, sord = UrlParameter.Optional } 
     ); 

希望你明白這個問題。最終我想要的是像下面的URL,所以然後它的AllGridData方法被激發。 「http:// localhost/MY/api/user/AllGridData/false/1342006446883/10/1/Id/desc」

我在做什麼錯?是否因爲路由代碼錯誤?

我的AllGridData方法位於WebAPI控制器中,不在MVC控制器中。

回答

2

thilok。我只是嘗試了一些類似的東西,用一個更簡單的路由。

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

並使用jQuery getJson調用來調用以下方法。

public IEnumerable<Organisation> Get(int id, int nd) 
     {       
      using (_unitOfWork) 
      { 

我發現我是能夠使使用所有的以下網址

/API /組織/ 2/3,/ API /組織/ 2次= 3/API/userorganisations /電話?id = 2 & nd = 3

這也適用於直接從瀏覽器窗口調用它們。 (鉻)。

我注意到,你有錯誤的是你有一個額外的行動{action}佔位符。這不應該在WebApi路由中。這僅適用於MVC路由。 WebApi的行爲沒有任何概念,因爲這全部由HttpVerbs處理。

進一步的信息可以在這裏找到

WebApi routing

1

您可以使用行動剛剛在的WebAPI太細。如果您正在嘗試構建RESTful,那麼您就不需要它們。

例如:

public HttpResponseMessage OpenBill(long billId) 

獲取它從路線:

routes.MapHttpRoute(
name: "DefaultApiWithActionAndId", 
routeTemplate: "api/{controller}/{action}/{id}", 
defaults: new { id = RouteParameter.Optional } 
); 

而且,你不必與一個以上的路線specifiy查詢字符串。這就是爲什麼/ api/organizations/2/3工作和/ 2?nd = 3工作。

恕我直言,你應該儘量保持路線儘可能簡單,否則你是在一個世界受到傷害,如果一些東西停止工作,你必須調試你的路線。所以我會去querystring版本。

爲什麼你會得到一個查詢字符串,我無法回答。這取決於誰在製作網址。這就是GET通常如何完成的。