C# Web API不可靠地从PUT返回状态代码和错误消息对象

C# Web API不可靠地从PUT返回状态代码和错误消息对象,c#,asp.net-web-api,asp.net-web-api2,C#,Asp.net Web Api,Asp.net Web Api2,我想从ApiController的PUT方法返回HTTP状态代码和错误消息 我创建了一个错误类: public class ErrorInformation { public string Message { get; set; } public DateTime ErrorDate { get; set; } } 在Put方法中,我返回: return new ResponseMessageResult(Request.CreateResponse(HttpStatusCod

我想从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.OK
HttpStatusCode.InternalServerError
-调用者在响应中获取对象。但是当它是HttpStatusCode.NotModified时,只返回状态代码

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


thx.

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

304响应不能包含消息体,因此总是由头字段后的第一个空行终止


来源:

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

304响应不能包含消息体,因此总是由头字段后的第一个空行终止


资料来源:

除了@crates\u barkes的答案,我应该指出,我认为这肯定是
内部服务器错误。如果存在某种冲突,则可以在此处使用特殊的
冲突
响应。因此,我建议您检查状态代码及其使用方式,例如在中。然后,您可以尝试以最佳方式将它们应用到您的场景中。

除了@crates\u barries的答案之外,我应该知道,在我看来,这肯定是
内部服务器错误。如果存在某种冲突,则可以在此处使用特殊的
冲突
响应。因此,我建议您检查状态代码及其使用方式,例如在中。然后,您可以尝试以最佳方式将其应用于您的场景。

无论如何,使用“未修改”状态代码是无效的,尤其是在出现“我们道歉,但发生意外错误”这样的消息时。请稍后再试。“无论如何,使用“未修改”状态代码是无效的,尤其是在“我们很抱歉,但发生了意外错误。请稍后再试”这样的消息中。谢谢-我正在考虑在PUT包含验证失败的数据时使用此错误代码(例如字段类型错误、太短、丢失等)。对于该场景,您建议使用哪种代码?(可供选择的数量很大——很难确定一个)。我想看看这里——400最好?是的,我相信在你的情况下,400“坏请求”是合适的。因为这肯定是客户端错误,所以请使用4xx范围内的状态代码。3xx代码主要用于重定向。谢谢-当PUT的数据验证失败(例如字段类型错误、太短、丢失等)时,我正在考虑使用此错误代码。对于该场景,您建议使用哪种代码?(可供选择的数量很大——很难确定一个)。我想看看这里——400最好?是的,我相信在你的情况下,400“坏请求”是合适的。因为这肯定是客户端错误,所以请使用4xx范围内的状态代码。3xx代码主要用于重定向。