ASP.NET MVC 中的 WebApi [FromUri] 等价物是什么?

What's the WebApi [FromUri] equivalent in ASP.NET MVC?

在 WebApi 中,我可以使用 [FromUri] 修饰控制器操作的参数,以便将 URI 'deserialized' 的组件放入 POCO 模型中;又名模型绑定。

尽管从 2.0 开始使用 MVC,但我从未将它用于网站(我不知道为什么)。它在 ASP.NET MVC 5 中的等效项是什么?

似乎无法在 IDE 中识别该属性,除非我需要引用库。

我想~/thing/2014/9绑定到以下模型:

public class WhateverModel
{
    public int Year { get; set; }
    public int Month { get; set; }
}

谢谢

更新

在另一个问题(上面的 link)中,OP 说:

However, switch this to plain MVC not WebApi and the default model binder breaks down and cannot bind the properties on objects in the nested array

这意味着他正在使用 WebApi 中的属性。我猜。我没有这些参考资料,因为我在 MVC 中,所以(ab)使用 WebApi 的版本是在 MVC 中执行此操作的可接受方式吗?

更新 2

该问题的答案是:

You need to construct your query string respecting MVC model binder naming conventions.

Additionally [FromUri] attribute in your example action is completely ignored, since it's not known to MVC DefaultModelBinder

所以我仍然不知道该怎么做,或者 OP 在那个问题中到底在谈论什么,如果他用错误的属性取得了一些成功。

我想我希望得到一个明确的答案,而不是其他问题的泥泞。

It'll Just Work™:

[HttpGet]
public ActionResult Thing(WhateverModel model)
{
    // use model
    return View();
}

至少,当使用 URL /thing?Year=2014&Month=9.

问题出在你的路由上。 URL /thing/2014/9 不会使用 MVC 的默认路由进行映射,因为那是 /{controller}/{action}/{id},其中 {id} 是可选的 int.

最简单的方法是使用属性路由:

[HttpGet]
[Route("/thing/{Year}/{Month}"]
public ActionResult Thing(WhateverModel model)
{
    // use model
    return View();
}

这会将 URL 映射到您的模型。