2012-06-03 24 views
1

這裏是路線定義:如何定義一個單獨的動作來處理來自這個控制器的所有http GET請求?

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

現在,在產品的控制,我有一個這樣定義的操作:

public string Get(string data="") 
{ 
    return "value"; 
} 

我測試http-get使用下列URL

api/product/ 
api/product/apple 

兩者都在工作

但是,如果我用這個URL

api/product/?p=5 

它會拋出一個異常

No action was found on the `controller` 'product' that matches the request. 

我知道我可以這樣定義的另一個行動來解決問題

public string Get(int p,string data="") 
{ 
    return "value"; 
} 

但這對我來說不起作用,因爲url上的參數是不可預知的,無論是參數的名稱還是參數的值。

所以,我的問題是

有沒有一種方法來定義一個動作來處理所有的http-get請求是來此控制器不管是什麼樣的查詢字符串在URL中使用?

+0

當你做'api/product?p = 5'時會發生什麼?我不能說我曾經見過一個URL,它的後面跟着一個查詢字符串。 –

+0

仍然是一樣的錯誤 – liuhongbo

回答

0

可以重載用的WebAPI的獲取:

public string Get(int p) {} 
public string Get(string data) {} 

雖然這不包括在其中你沒有傳遞參數,從我的理解您的方案的情況下,這兩種方法應適用(無論是名字還是價值),所以這應該沒問題。

相關問題