我的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开箱即用?
有人能指出我做错了吗?
答案 0 :(得分:3)
因此,Web API假定GET请求将在操作方法签名中使用简单类型,而POST等将使用复杂类型。
默认情况下,GET请求不会从URL中的值绑定复杂类型。要启用此功能,请添加特殊属性:
public string Blah([FromUri]Foo model)
然后一切都按预期工作。