【问题标题】:Why can't I bind this Web Api parameter to query string?为什么我不能将此 Web Api 参数绑定到查询字符串?
【发布时间】:2014-01-18 16:52:49
【问题描述】:

我有一个这样的控制器操作:

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 方法,采用验证类型参数。)

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

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

并尝试了

[FromUri] ValidationType? validationType,

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

更新:好的,我得到了它 route 但不是参数绑定。如果我引入一个新的“无”枚举成员并做

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

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

【问题讨论】:

  • 目前无法验证,但我认为您还需要 ValidationType 上的 FromUri 属性。 PUT 的默认设置是绑定到请求正文而不是 URI。只有 GET 绑定到 URI,因为没有正文。查询字符串是 tje uri 的一部分。
  • 我试过使用 [FromUri] 并没有什么区别。我也尝试过 GET,它似乎和 PUT 有同样的问题。

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


【解决方案1】:

呃…… 实际上我的参数名称错误。我混淆了“验证”和“验证类型”。好尴尬。

【讨论】:

    猜你喜欢
    • 2021-08-21
    • 2011-10-28
    • 2012-07-16
    • 2015-02-02
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多