如何获得此视图模型属性的自动模型绑定?

时间:2014-03-18 09:42:05

标签: asp.net-mvc asp.net-web-api model-binding

我的Web API项目中有一个操作,它接受一个像这样的视图模型对象:

public string Blah(Foo model)

Foo看起来像这样:

public class Foo
{
    public string Bar { get; set; }
}

(我之所以使用视图模型类而不是直接将Bar绑定为字符串是因为我想将类插入某些验证逻辑。)

我的路由如下:

config.Routes.MapHttpRoute(
                name: "Name",
                routeTemplate: "Blah/{Bar}",
                defaults: new { controller = "MyController", action = "Blah", Bar = RouteParameter.Optional });

我发现的是调用端点命中操作方法,但Foo视图模型为空。我期待一个含水的Foo Bar属性设置为用户在URL中提供的任何内容。我认为这种属性绑定与MVC开箱即用?

有人能指出我做错了吗?

1 个答案:

答案 0 :(得分:3)

因此,Web API假定GET请求将在操作方法签名中使用简单类型,而POST等将使用复杂类型。

默认情况下,GET请求不会从URL中的值绑定复杂类型。要启用此功能,请添加特殊属性:

public string Blah([FromUri]Foo model)

然后一切都按预期工作。