自从升级到RC的WebAPI,我有一些真正奇怪的问题时调用POST在我的WebAPI。 我甚至回到了在新项目上生成的基本版本。所以:

public void Post(string value)
{
}

提琴手喊道:

Header:
User-Agent: Fiddler
Host: localhost:60725
Content-Type: application/json
Content-Length: 29

Body:
{
    "value": "test"
}

当我调试时,字符串“value”永远不会被赋值。它总是NULL。 有人有这个问题吗?

(我第一次看到这个问题是在一个更复杂的类型上)

这个问题不仅仅局限于ASP。在asp.net MVC 4中,同样的问题出现在一个新的ASP。NET MVC 3项目后RC安装


当前回答

在我的例子中,用Newtonsoft的[JsonObject(memberseriizable . optout)]属性装饰参数类就很管用。

例如:

[HttpPost]
[Route("MyRoute")]
public IHttpActionResult DoWork(MyClass args)
{
   ...
}

[JsonObject(MemberSerialization.OptOut)]
public Class MyClass
{
    ...
}

其他回答

我尝试了这个帖子中的许多答案,但没有一个对我有用。然后我在一个类似的帖子中看到了这个答案:https://stackoverflow.com/a/40853424/2120023,他提到HttpContext. request . body,所以另一个搜索,我发现这个https://stackoverflow.com/a/1302851/2120023给了我HttpContext。当前,所以我终于得到了这个工作使用:

HttpContext.Current.Request.Form.Get("value");

邮差的要求:

curl --location --request POST 'https://example.com/token' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'value=test'

我也遇到过这个问题,这就是我解决问题的方法

webapi守则:

public void Post([FromBody] dynamic data)
{
    string value = data.value;
    /* do stuff */
}

客户机代码:

$.post( "webapi/address", { value: "some value" } );

添加一行

        ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());

到function protected void Application_Start()在Global.asax.cs中为我修复了类似的问题。净MVC3。

我有同样的问题,获得null作为参数,但它与大对象有关。事实证明,这个问题与IIS最大长度有关。它可以在web.config中配置。

  <system.web>
    <httpRuntime targetFramework="4.7" maxRequestLength="1073741824" />
  </system.web>

我想知道为什么Web API抑制错误并向我的API发送空对象。我使用Microsoft.AspNet.WebApi.Tracing发现了这个错误。

我知道这不是问题的答案,但我在寻找解决问题的方法时偶然发现了它。

在我的情况下,复杂类型没有被绑定,但我没有做一个POST,我正在做一个GET与查询字符串参数。解决方案是在参数中添加[FromUri]:

public class MyController : ApiController
{
    public IEnumerable<MyModel> Get([FromUri] MyComplexType input)
    {
        // input is not null as long as [FromUri] is present in the method arg
    }
}