2012-06-22 81 views
4

的一部分說我有以下方法一個控制器:的ASP.NET Web API的日期時間傳遞給控制器​​URI

public int Get(DateTime date) 
{ 
    // return count from a repository based on the date 
} 

我希望能夠同時傳遞日期的一部分來訪問的方法URI本身,但目前我只能在將日期作爲查詢字符串傳遞時才能使用它。例如:

Get/2012-06-21T16%3A49%3A54-05%3A00 // does not work 
Get?date=2005-11-13%205%3A30%3A00 // works 

任何想法,我可以得到這個工作?我嘗試過使用自定義MediaTypeFormatters,但即使將它們添加到HttpConfiguration的Formatters列表中,它們似乎也不會被執行。

+0

你的服務路線是什麼樣的? – cecilphillip

回答

3

讓我們來看看你的默認MVC路由代碼:!

routes.MapRoute(
      "Default", 
      "{controller}/{action}/{id}", 
      new {controller = "Home", action = "Index", **id** = UrlParameter.Optional} 
      ); 

好吧看名字ID您需要命名方法參數「ID」,這樣模型綁定知道你要綁定到它

使用此? -

public int Get(DateTime id)// Whatever id value I get try to serialize it to datetime type. 
{ //If I couldn't specify a normalized NET datetime object, then set id param to null. 
    // return count from a repository based on the date 
} 
3

如果您想將它作爲URI本身的一部分傳遞,您必須考慮在Global.asax中定義的默認路由。如果你沒有改變它,它會聲明URI在/ Controller/action/id中分解了。在HomeController類

例如,URI「首頁/索引/你好」轉換成指數(「你好)。

因此,在這種情況下,如果您更改了日期時間參數的名稱,它應該工作」 id'而不是'date'

將參數的類型從'DateTime'更改爲'DateTime?'也可能更安全一些。防止錯誤和作爲第二句話,在MVC模式的所有控制器方法應該返回一個ActionResult對象

好運

+0

如果你真的想命名參數'日期',你總是可以在你的global.asax文件中註冊一個新的路由。 – stijndepestel

+0

「假設你在ASP.NET MVC框架中工作。」這個問題被標記爲MVC。 –

+6

新在這裏,只是想幫助。 – stijndepestel

相關問題