2014-10-07 37 views
2

我在的WebAPI控制器下面的函數頭聲明爲路線:的WebAPI路由與多個可選參數的函數

[Route("page/{page}/{cityfilter?}/{statefilter?}/{organizationfilter?}")] 
public IEnumerable<Contact> GetContact(int page, string cityfilter = null, string statefilter = null, string organizationfilter = null) 
{ 
    ... 
} 

這裏的問題是,我希望每一個參數是可選的,所以我d想要做一個具有城市過濾器,狀態過濾器,組織過濾器,其中兩個或三個的請求,然後通過此函數進行處理和路由,但我不知道如何構建URI例如,這條路線只適用於狀態過濾器。

我該如何在WebAPI中做到這一點?我應該如何從例如Jquery Ajax調用中調用資源地址?

謝謝。

+0

你絕對必須在url路徑中有可選參數嗎?將它們作爲查詢字符串參數有問題嗎? – elolos 2014-10-07 09:00:01

+0

我可以打電話作爲查詢字符串沒有問題,但那麼我應該如何更改我的WEBAPI函數的標題?謝謝 – 2014-10-07 09:01:26

回答

3

由於參數是簡單類型(字符串),它們可以從路徑數據(URL路徑)或查詢字符串進行綁定。因此,您可以將可選參數移動到查詢字符串,並讓您的路線只匹配page參數。

[Route("page/{page}")]

這裏,你會用它來調用從瀏覽器或從一個AJAX調用此操作的URL的一個例子:

www.yourapidomain.com/page/1?cityfilter=aCityFilterString&statefilter=aStateFilterString&organizationfilter=anOrganizationFilter

你當然可以省略可選的任何參數或更改其順序。

操作方法簽名可以保持原樣,在您的示例中。

欲瞭解更多信息,你可以看看parameter binding ASP.NET Web API

+1

謝謝,解決方案創造了奇蹟! – 2014-10-07 09:53:46