为什么我不能将此Web Api参数绑定到查询字符串?

时间:2014-01-18 16:52:49

标签: asp.net-web-api model-binding optional-parameters query-parameters

我有一个像这样的Controller动作:

public async Task<HttpResponseMessage> Put(
        [FromUri] ResourceSpec resource,
        //ValidationType? validationType,
        CreateResourceRequest body)

public enum ValidationType
{
    name = 1,
}

效果很好 - 资源对象和正文对象(类)分别从URL路由参数和请求体中填充。

我想要做的事情就是将可选的validationType参数绑定到PUT请求中的查询字符串参数。

当我取消注释ValidationType行(并且验证类型是枚举),并发送带有?validationType = name查询参数的url时,我会收到错误路由到某个操作,例如405方法不允许(允许:GET)(是的,我在这个控制器上有一个GET方法,采用validationType参数。)

是的,我尝试在路由代码中将参数设置为可选:

defaults: new { controller = "Resource", validationType = RouteParameter.Optional }

并尝试了

[FromUri] ValidationType? validationType,

的变化。请告诉我为什么这不起作用!

更新:好的我把它带到 route 但不是参数bind。如果我引入一个新的'none'枚举成员并执行

defaults: new { controller = "Resource", validationType = ValidationType.none }

然后我的行动将被召唤。但即使我的查询字符串有?validating=name,它也始终会获得参数值ValidationType.none! [FromUri]仍然没有区别。是什么给了什么?

1 个答案:

答案 0 :(得分:2)

...咄 实际上我的参数名称错了。我混淆了'验证'和'validationType'。多么尴尬。