2012-05-31 63 views
7

我正在使用新的asp.net web api,並希望傳遞可選參數,我相信你需要填充一個屬性,這樣它可以讓我傳遞params使用?符號。asp.net webapi:如何傳遞可選參數?

在此之前與我相信的uri模板完成。

有沒有人有一個例子或任何幫助,真的很感激。

我目前傳遞的ID在到達我的控制器INT我倒是

的URL,但我需要通過一些日期

+0

你能否澄清一下你的情況?你期望什麼行動方法簽名?你做了什麼路由改變?關於Web API路由基礎知識的一些信息可以在這裏找到:http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api – marcind

回答

6

你可以讓一個可選的參數通過使用可空類型:

public class OptionalParamsController : ApiController 
{ 
    // GET /api/optionalparams?id=5&optionalDateTime=2012-05-31 
    public string Get(int id, DateTime? optionalDateTime) 
    { 
     return optionalDateTime.HasValue ? optionalDateTime.Value.ToLongDateString() : "No dateTime provided"; 
    } 
} 
+0

謝謝Ian,效果很好。 – Martin

3

除了由Ian,這是正確的提供的前面的回答,您也可以提供默認值,我覺得是避免了檢查東西是否通過與否更清潔的選擇。只是另一種選擇。

public class OptionalParamsController : ApiController 
{ 
    // GET /api/optionalparams?id=5&optionalDateTime=2012-05-31 
    public string Get(int id, DateTime optionalDateTime = DateTime.UtcNow.Date) 
    {...} 
} 
+3

可選參數必須是編譯時常量,DateTime永遠不是編譯時常量。 – frapontillo

+0

糟糕,是的,你是對的。日期時間不能作爲可選參數提供,我不應該以此爲例。但是,其他數據類型可以這種方式使用。 – AlexGad

+0

在我當前的項目中,如果我沒有提供默認值,則路由未解析,返回404(未找到)HTTP錯誤。方法簽名必須是'void MyAction(long id,long?value1 = -1,long?value2 = -1)'...如果我不提供默認值,它將失敗,如果不傳遞查詢字符串! – Loudenvier