【问题标题】:Modele Binding error when POST method called Web APIPOST 方法调用 Web API 时出现模型绑定错误
【发布时间】:2019-02-27 18:27:42
【问题描述】:

在阅读了很多关于我现在犯的同样错误的主题后,我来到这里发帖。

我有一个在 GET 中工作但在 POST 中不工作的 WEB API。 当我使用 POSTMAN 向他发送 JSON 时,我在 ModelState 中收到一条错误消息,即 ModelError ModelBinding

这是我的模型类:

[DataContract]
public class Employee
{
        [DataMember]
        public int ID { get; set; }
        [DataMember(IsRequired = true)]
        public string FirstName { get; set; }
        [DataMember(IsRequired = true)]
        public string LastName { get; set; }
}

这是我的 API 控制器的 Post 方法:

public IHttpActionResult Post([FromBody]Employee emp)
{
            if (!ModelState.IsValid)
                return BadRequest("Invalid data");

            ...
            return Ok();
}

在这个控制器中,我传入我的 if 并且它返回“无效数据”给我

我尝试了一切,我删除了模型中的[DataContract],但没有任何效果。

这是我发送的 JSON 示例:

{
    "FirstName" : "John",
    "LastName" : "Malon"
}

来自 Postman 的完整代码:

POST /api/employees HTTP/1.1
Host: localhost:49463
Content-Type: application/json
cache-control: no-cache
Postman-Token: 5ac38b20-425a-4ac7-995a-323fbd0bb9a5
{
    "FirstName" : "John",
    "LastName" : "Malon",
}------WebKitFormBoundary7MA4YWxkTrZu0gW--

编辑:看来我在 Post 方法中收到的 emp 对象为 null 我看到了这个帖子:Post parameter is always null 但是英语不是我的主要语言,我无法弄清楚= 的解决方案是什么 我知道我需要在我发送的 JSON 中添加一个 =,对吗?

提前感谢您的帮助!

【问题讨论】:

  • 可能正在尝试验证 ID,尝试发送 ID:0 或其他内容
  • 正好ID是随DB自动递增的,我不想用JSON传输
  • 但是你能用 Postman 测试一下,看看是不是这个问题吗?
  • 1) 您是否调试并验证了为 emp 对象设置的属性。 2)使用邮递员您是否尝试过设置标题:ContentType >> application/json? 3) 在调试 ModelState 时应该告诉你为什么它失败了......
  • 从 ModelState 中获取错误

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


【解决方案1】:

确保您从邮递员发送application/json 标头。否则我看不到发布的代码有任何问题。

【讨论】:

    【解决方案2】:

    您正在定义一个包含不可为空的 int 的类,但您没有在 POST 正文中提供一个。除非您为该属性提供值,否则这将始终失败验证。

    如果你想成功,你可以 -

    选项 1 - 更改您的模型以接受空 Id:

    public class Employee
    {
            public int? ID { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
    }
    

    选项 2 - 在您的 POST 正文中提供一个默认(但有效!)int,一旦生成了 Id,就必须将其替换为您的数据库/后端代码:

    {
        "ID" : 0,
        "FirstName" : "John",
        "LastName" : "Malon"
    }
    

    【讨论】:

    • 我在 JSON 中使用 ID 进行了测试,但它也不起作用
    猜你喜欢
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 2021-06-02
    • 2012-11-28
    • 2019-01-30
    • 2021-06-26
    • 2012-09-07
    • 2012-09-27
    相关资源
    最近更新 更多