POST方法称为Web API

时间:2019-02-27 18:27:42

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

在阅读了许多有关我现在遇到的相同错误的主题之后,我来这里发表文章。

我有一个WEB API,它可以在GET中使用,而不能在POST中使用。 当我用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"
}

My header contains the contentType JSON

邮递员的完整代码:

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中添加=,对吗?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

请确保您要从邮递员发送releases: web-env: version: new version enabled: true web-app: enabled: true version: 1.39.0 标头。否则,发布的代码不会出现任何问题。

答案 1 :(得分:0)

您正在定义一个包含不可为空的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"
}