6

我想让我的通用路由确定是否像这样在 URL 中传递了查询字符串

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

这是我当前的路线定义:

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

我已经阅读了一些答案,说将 dateOfLog 值添加为 Route 定义的可选操作:

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 的 Route 定义并将我的自定义 url 映射到控制器的参数。

4

1 回答 1

6

In the controller action, just include DateTime dateOfLog as a method parameter and continue to use the query string as it will get mapped just fine, Web API will use the correct method overload if it finds it.

于 2013-03-29T20:57:11.987 回答