【问题标题】:How to Send Message and Status by result WebApi Core?如何通过结果 WebApi Core 发送消息和状态?
【发布时间】:2020-03-29 11:10:24
【问题描述】:

我想在 WebAPI Core 3.1 中返回消息和状态码。 例如服务 GetAllUsers() 返回 AllUser 并且返回码是OK(Users)。 没关系。

但是如果GetAllUsers()返回null(User Not Fund),Service返回204状态码。 204代码没有正文。如何通过204发送消息? 如果我必须使用 404 而不是 204。那么 204 的原因是什么?

另一个问题:

500 statusCode中我们有如下输出:

  {
    "type": "https://tools.ietf.org/html/rfc7231#section-6.6.1",
    "title": "An error occured while processing your request.",
    "status": 500,
    "detail": "Error",
    "traceId": "|b8dbff20-4a070d9818356f4c."
  }

对于其他代码以不同的方式。有没有办法为所有代码创建一个类并有一个输出?我需要这个类供 Android 程序员使用。 我只需要一条可能是 JSON 列表的消息并且我有一个状态。 我们以前对 Jason 这样做过,但现在每个人都有评论。

【问题讨论】:

  • 204 相当于 NoContent() ,旨在故意不返回任何内容。听起来你应该返回 NotFound() 这是一个 404。
  • 您还问“204 的目的是什么?” - 它通常在添加新项目 (PUT/POST) 之后使用,其中标准做法是返回整个对象集合,或者因为通常不需要返回所有内容,所以您可以返回 NoContent()(例如,项目已添加根据要求,但您不会获得完整的收藏品)

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


【解决方案1】:

如果您仍然想发送状态为 200 的消息,即使结果为空,您可以尝试以下操作:

var result = GetAllUsers();
if(!result) return Ok("no available users");
else {
return Ok(result);
}

如果您仍想发送一个空正文的 200 状态码,您可以试试这个:

var result = GetAllUsers();
if(!result) return Ok(); // will return an empty body with a 200 code
else {
return Ok(result);
}

【讨论】:

  • 这不会在反序列化响应时给 API 的用户带来问题吗?他们会期望 HTTP 200 响应与对象的特定结构相匹配。
  • 你是对的,这就是为什么最好的做法是返回一个 204 状态码。如果你仍然想返回一个空正文的 200 响应,你可以检查我添加的新代码。
猜你喜欢
  • 2018-05-30
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多