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

时间:2017-02-27 17:22:10

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

我想返回一个HTTP状态代码&来自ApiController的PUT方法的错误消息。

我创建了一个错误类:

func main() {
    myFunc()
    fmt.Print(&buf)
}

func myFunc() {
    defer func() {
        if r := recover(); r != nil {
            logger.Println("Recovered from panic: ", r)
        }
    }()
    myPanic()
}

func myPanic() {
    panic("Panicking in myPanic")
}

在Put方法中我返回:

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

当状态代码为时,请说:

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时 - 只返回状态代码。

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

THX。

2 个答案:

答案 0 :(得分:4)

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

  

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

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

答案 1 :(得分:0)

除了@crates_barrels的答案之外,我应该认为它对我来说肯定是Internal Server Error。如果您遇到某种冲突,那么您可以在此处使用特殊的Conflict响应。因此,我建议您检查状态代码及其使用方式,例如:在wiki。然后,您可以尝试以最佳方式应用它们。