39

我正在嘗試使用Web API 2屬性路由來設置自定義API。我有我的路線工作,以便我的函數被調用,但出於某種原因,我需要傳遞我的第一個參數,以便一切正常工作。以下是我想支持網址:在ASP.NET Web API中使用可選參數進行屬性路由

http://mysite/api/servicename/parameter1 
http://mysite/api/servicename/parameter1?parameter2=value2 
http://mysite/api/servicename/parameter1?parameter2=value2&parameter3=value3 
http://mysite/api/servicename/parameter1?parameter2=value2&parameter3=value3&p4=v4 

最後3個網址工作,但第一個說「不採取行動是控制器‘控制器名稱’與請求匹配上找到。」

我的控制器看起來是這樣的:

public class MyServiceController : ApiController 
{ 
    [Route("api/servicename/{parameter1}")] 
    [HttpGet] 
    public async Task<ReturnType> Get(string parameter1, DateTime? parameter2, string parameter3 = "", string p4 = "") 
    { 
     // process 
    } 
} 

回答

65

的Web API要求即使是空類型明確設置可選值...所以你可以嘗試設置下面,你會看到你的第一個請求成功

DateTime? parameter2 = null 
+0

呃,當然這很明顯。謝謝! – sohum

+9

您的RouteAttribute最終看起來支持可選參數(或者如果您的路由與原始文章一樣,請求URL的外觀如何)? – Colin