对API的发布请求正在接收NULL

时间:2017-09-12 05:57:11

标签: c# asp.net-web-api asp.net-core-webapi

我有一个ASP.NET Core API,期望以特定对象的形式发出POST请求 - 请参阅下面的代码示例。

我确保我的前端客户端以精确的形状发送数据。我还通过检查我与Fiddler的调用确保将数据发送到API。

当请求到达API方法时,它是null

我的第一个想法是模型绑定器是导致问题的原因。意思是,不知何故,我发送的数据与我的API方法所期望的对象不匹配。

我现在一直盯着代码几个小时,对我来说似乎没问题。假设前端发送的对象的形状与我的API期望的对象匹配,还有什么可能导致这个问题?

我在我的应用程序中使用了类似的代码,一切正常。

我的代码如下所示:

[HttpPost("test")]
public async Task<IActionResult> DoSomething([FromBody]MyObject data)
{
   // Some logic here...
}

以下是我确定的一些事项:

  1. 我正在使用API​​方法,因此没有路由问题
  2. 上述观点也证实我的前端客户端正在发送请求
  3. 我知道我的前端客户端正在发送数据 - 通过Fiddler
  4. 确认

    更新:

    这绝对是由模型绑定器引起的。我将代码从MyObject更改为dynamic以查看会发生什么,并且确定我正在获取前端发送的数据。我还没有找到引起问题的确切属性,但我很接近。这是我的API方法现在的样子,直到找到问题的确切原因:

    [HttpPost("test")]
    public async Task<IActionResult> DoSomething([FromBody]dynamic data)
    {
       // Some logic here...
    }
    

    更新2: 发现问题!!!!

    我有一个GUID属性,其中包含null valud,模型绑定器不喜欢它。

1 个答案:

答案 0 :(得分:1)

当您的对象无法从JSON请求反序列化时,通常会发生这种情况。

最佳做法是确保所有请求属性都可以接受null(使值类型属性为nullable)。然后,您可以验证请求中是否提供了所有操作需求,如果没有,则返回400 error