5

假设我有一个具有以下方法的控制器:

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 列表中,它们似乎从未被执行。

4

2 回答 2

3

如果您想将其作为 URI 本身的一部分传递,您必须考虑在 Global.asax 中定义的默认路由。如果您没有更改它,它表明 URI 在 /Controller/action/id 中分解。

例如 uri 'Home/Index/hello' 在 HomeController 类中转换为 Index("hello)。

因此,在这种情况下,如果您将 DateTime 参数的名称更改为“id”而不是“日期”,它应该可以工作。

将参数的类型从“日期时间”更改为“日期时间?”也可能更安全。以防止错误。另外,mvc 模式中的所有控制器方法都应该返回一个 ActionResult 对象。

祝你好运!

于 2012-07-08T08:36:00.400 回答
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
}
于 2012-07-08T08:42:46.833 回答