我正在使用新的asp.net web api,並希望傳遞可選參數,我相信你需要填充一個屬性,這樣它可以讓我傳遞params使用?符號。asp.net webapi:如何傳遞可選參數?
在此之前與我相信的uri模板完成。
有沒有人有一個例子或任何幫助,真的很感激。
我目前傳遞的ID在到達我的控制器INT我倒是
的URL,但我需要通過一些日期
我正在使用新的asp.net web api,並希望傳遞可選參數,我相信你需要填充一個屬性,這樣它可以讓我傳遞params使用?符號。asp.net webapi:如何傳遞可選參數?
在此之前與我相信的uri模板完成。
有沒有人有一個例子或任何幫助,真的很感激。
我目前傳遞的ID在到達我的控制器INT我倒是
的URL,但我需要通過一些日期
你可以讓一個可選的參數通過使用可空類型:
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";
}
}
謝謝Ian,效果很好。 – Martin
除了由Ian,這是正確的提供的前面的回答,您也可以提供默認值,我覺得是避免了檢查東西是否通過與否更清潔的選擇。只是另一種選擇。
public class OptionalParamsController : ApiController
{
// GET /api/optionalparams?id=5&optionalDateTime=2012-05-31
public string Get(int id, DateTime optionalDateTime = DateTime.UtcNow.Date)
{...}
}
可選參數必須是編譯時常量,DateTime永遠不是編譯時常量。 – frapontillo
糟糕,是的,你是對的。日期時間不能作爲可選參數提供,我不應該以此爲例。但是,其他數據類型可以這種方式使用。 – AlexGad
在我當前的項目中,如果我沒有提供默認值,則路由未解析,返回404(未找到)HTTP錯誤。方法簽名必須是'void MyAction(long id,long?value1 = -1,long?value2 = -1)'...如果我不提供默認值,它將失敗,如果不傳遞查詢字符串! – Loudenvier
你能否澄清一下你的情況?你期望什麼行動方法簽名?你做了什麼路由改變?關於Web API路由基礎知識的一些信息可以在這裏找到:http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api – marcind