【问题标题】:POST request from Postman fails model validation来自 Postman 的 POST 请求未通过模型验证
【发布时间】:2019-08-23 11:48:08
【问题描述】:

在我的 ASP.NET WebApi 程序中,我有一个 Author 模型:

public class Author
{
    public int Id { get; set; }
    [Required] public string Name { get; set; }
}

我还有一个AuthorsController,带有PostAuthor(Author author) 方法:

// POST: api/Authors
[ResponseType(typeof(Author))]
public async Task<IHttpActionResult> PostAuthor(Author author)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    // etc.
}

当我在单元测试中以编程方式发送POST 请求时,会返回HTTP Status Code 201 Created

但是,当我使用Postman 发送POST 请求时,我收到的是HTTP Status Code 400 Bad Request

如您所见,当我使用Postman 发送POST 请求时,传递给PostAuthor(Author author) 方法的参数是null,结果模型验证失败:

我应该怎么做才能确保可以处理来自PostmanPOST 请求?

【问题讨论】:

  • 错误不是很明显?当您声明像这样的 JsonObject `new { key = value} ` 时,您不在 Visual Studio 中,但您在 Postman 中创建 JsonObject 的地方,如 { key : value , key1 : value1 } 。希望这会有所帮助
  • @my_g 当您以编程方式发送请求时,作者的价值是什么?
  • 如果您将作者发送为 null 并且您自动输入作者姓名,则您的模型无效,这就是 ModelState.IsValid 为 false 并返回 badrequest 的原因
  • @GabrielCostin 你是对的;我睡眠不足的大脑错过了明显的解决方案......
  • @MY_G 没问题,它可以发生在每个人身上。

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


【解决方案1】:

几个变化:将其定义为HttpPost 并使用FromBody like

// POST: api/Authors
[HttpPost]
[ResponseType(typeof(Author))]
public async Task<IHttpActionResult> PostAuthor([FromBody] Author author)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    // etc.
}

【讨论】:

    【解决方案2】:

    将 = 替换为 : 在邮递员正文中,毕竟它是一个 JSON。

    【讨论】:

    • 你是对的;我睡眠不足的大脑错过了明显的解决方案......
    • 这发生在我们所有人身上。很高兴我能帮忙
    【解决方案3】:

    如果您在 application/json 中发送并且您的 API 等待为 INBOUND JSON,那么请尝试以 JSON 格式发送,例如

    {
    "Id":"6",
    "Name":"P.G. Wodehouse"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 2019-02-14
      • 2017-10-23
      • 1970-01-01
      • 2020-05-29
      • 2018-11-28
      • 1970-01-01
      相关资源
      最近更新 更多