2013-03-29 103 views
6

我想有我一般的路線確定查詢字符串是在URL中傳遞這樣操作和查詢字符串參數的Web API

http://localhost/query/DailyLogs/1?dateOfLog='1/13/2013' 

這是我目前的路由定義:

routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "query/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional} 
     ); 

我已閱讀一些答案,說在路由定義中添加dateOfLog值作爲可選操作:

routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "query/{controller}/{id}/{dateOfLog}", 
      defaults: new { id = RouteParameter.Optional, 
      dateOfLog = RouteParameter.Optional } 
     ); 

這似乎不工作,也許我做錯了什麼,我不知道。


這是我目前如何處理這個問題,但我想用路由引擎的ModelBinding功率:

var queryValue = Request.RequestUri.ParseQueryString(); 
string dateOfLog = queryValue["dateOfLog"]; 

請告訴我如何創建將使用路由定義ModelBinding並將我的自定義URL映射到控制器的參數。

回答

6

在控制器操作中,只需包含DateTime dateOfLog作爲方法參數,並繼續使用查詢字符串,因爲它將很好地映射,Web API將在找到它時使用正確的方法重載。

+0

我試過了,沒有成功。以下是方法簽名:public DailyLogResponse Get(int id,DateTime dateOfLog),使用上面的路由永遠不會遇到方法。 –

+0

好的,嘗試在方法參數中使用字符串類型而不是DateTime。 – Moo

+0

是的,你是正確的,它實際上是一個DateTime解析錯誤,當我將參數類型更改爲字符串方法觸發和值存在。謝謝。 –