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

时间:2015-02-27 13:32:33

标签: c# asp.net-mvc asp.net-mvc-routing model-binding

在WebApi中,我可以使用[FromUri]修饰控制器操作上的参数,以便将URI的组件反序列化为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; }
}

由于

更新

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

  

但是,将其切换为普通MVC而不是WebApi,并且默认模型绑定器会崩溃,并且无法绑定嵌套数组中对象的属性

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

更新2

在回答这个问题时:

  

您需要构建关于MVC模型绑定器命名约定的查询字符串。

     

此示例操作中的[FromUri]属性完全被忽略,因为MVC DefaultModelBinder不知道它

因此,如果他在错误的属性上取得了一些成功,那么我仍然不知道该OP在该问题上该做什么或在地球上做什么。

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

1 个答案:

答案 0 :(得分:29)

It Just #l Just Work™:

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

至少在使用网址/thing?Year=2014&Month=9

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

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

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

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