【问题标题】:Web API unreliably returning status code and error message object from PUTWeb API 从 PUT 不可靠地返回状态代码和错误消息对象
【发布时间】:2017-02-27 17:22:10
【问题描述】:

我想从 ApiController 的 PUT 方法返回 HTTP 状态代码和错误消息。

我创建了一个错误类:

public class ErrorInformation
{
    public string Message { get; set; }
    public DateTime ErrorDate { get; set; }
}

在 Put 方法中我返回:

return new ResponseMessageResult(Request.CreateResponse(HttpStatusCode.NotModified,
                    new ErrorInformation { Message = "We apologize but an unexpected error occured. Please try again later.", ErrorDate = DateTime.UtcNow }));

当状态码是,说:

HttpStatusCode.OKHttpStatusCode.InternalServerError - 调用者在响应中获取对象。但是当它是HttpStatusCode.NotModified 时 - 只返回状态码。

为什么会这样 - 我如何确保始终返回我的对象​​和状态代码?

谢谢。

【问题讨论】:

  • 无论如何,这对于“未修改”状态代码的使用都是无效的,尤其是对于类似“我们道歉但发生意外错误”这样的消息。请稍后再试。”

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


【解决方案1】:

根据HTTP规范,304“未修改”响应不允许有响应体:

304 响应不得包含消息正文,因此始终以标头字段之后的第一个空行终止。

来源:https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5

【讨论】:

  • 谢谢 - 当 PUT 包含未通过验证的数据时(例如,字段类型错误、太短、缺失等),我正在考虑使用此错误代码。对于这种情况,您会推荐哪种代码? (可用的数字很大 - 很难确定)。
  • 我想看看这里 - stackoverflow.com/questions/3290182/… - 400 最好?
  • 是的,我相信在您的情况下,400“错误请求”是合适的。因为它肯定是客户端错误,所以使用 4xx 范围内的状态码。 3xx 代码主要用于重定向。
【解决方案2】:

除了@crates_barrels 的回答之外,我应该认为这对我来说绝对是Internal Server Error。如果您有某种冲突,那么您可以在此处使用特殊的Conflict 回复。所以我建议你检查状态码以及它们是如何使用的,例如在wiki。然后,您可以尝试以最佳方式将它们应用到您的场景中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2019-02-24
    • 2019-01-04
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    相关资源
    最近更新 更多