【问题标题】:Actions and QueryString parameters in Web APIWeb API 中的操作和 QueryString 参数
【发布时间】:2013-03-20 14:57:16
【问题描述】:

我想让我的通用路由确定是否像这样在 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 映射到控制器的参数。

【问题讨论】:

    标签: asp.net-web-api query-string asp.net-web-api-routing


    【解决方案1】:

    在控制器操作中,只需将DateTime dateOfLog 包含为方法参数并继续使用查询字符串,因为它会被很好地映射,Web API 将使用正确的方法重载,如果它找到它。

    【讨论】:

    • 我试过了,没有成功。这是方法签名:public DailyLogResponse Get(int id, DateTime dateOfLog),使用上面的路由永远不会命中方法。
    • 好的,尝试在方法参数中使用字符串类型而不是DateTime。
    • 是的,你是对的,它实际上是一个 DateTime 解析错误,当我将参数类型更改为字符串时,方法会触发并且值存在。谢谢。
    • 这可能是因为您的查询字符串参数包含单引号,这在 URL 中是不必要的。此外,您的正斜杠日期部分分隔符应该是 URL 编码
    猜你喜欢
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 2013-05-12
    • 2015-12-19
    • 2014-09-14
    • 2013-01-30
    相关资源
    最近更新 更多