如何在ASP.NET WebAPI RC中绑定一个简单的POST值?

Dyl*_*tie 5 asp.net-web-api

我在我的一个API控制器上有一个POST方法,它接受一个字符串值:

public string Post([FromBody] string foo) {
    return(fooOracle.ValidateFoo(foo) ? "success" : "failure");
}
Run Code Online (Sandbox Code Playgroud)

我正在使用帖子请求的正文发布到这个:

foo=123412341234
Run Code Online (Sandbox Code Playgroud)

(即,您可以通过提交浏览器表单以及使用HTTP客户端来启动常规HTTP POST)

在WebAPI的候选版本中,它已经默默地停止工作 - 它只是不再绑定foo.为了使代码正常工作,我必须用以下方法替换方法:

public string Post(FormDataCollection form) {
    var foo = form.Get("foo");
    return(fooOracle.ValidateFoo(foo) ? "success" : "failure");
}
Run Code Online (Sandbox Code Playgroud)

可行,但它有点混乱,涉及比以前版本更多的管道测试.

我是否错过了一些微妙的变化,或者是否已弃用[FromBody]绑定语法而支持这种相当冗长的绑定语法?该属性仍然存在,但它真的不清楚它在RC版本中实际做了什么.

小智 1

实际上有一个微妙的变化,它无法处理像“foo=123412341234”这样的输入,但会处理“=123412341234”作为输入。你能让客户稍后发送吗?

如果没有,您可以创建一个包装类,如下所示,并使您的操作期望 stringwrapper 作为参数而不是 String 本身。

类 StringWrapper { 公共字符串 Foo {get; 放;} }