POST无效对象:我必须返回什么HTTP状态代码?

时间:2013-08-07 09:13:39

标签: c# wcf http rest

我正在使用WCF开发REST服务,当POST无效Message时,我不知道要返回哪种类型的HTTP状态代码。注意:此处的消息类似于聊天消息(文本和一些数据)。

这就是我实现WCF服务的方式:

IServiceContract

[OperationContract]
[WebInvoke(Method = "POST",
    UriTemplate = "/messages",
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.Bare)]
Message AddMessage(Message message);

服务实施

public Message AddMessage(Message message)
{
    OutgoingWebResponseContext ctx =
        WebOperationContext.Current.OutgoingResponse;

    if (message == null)
    {
        ctx.StatusCode = System.Net.HttpStatusCode.RequestedRangeNotSatisfiable;
        ctx.StatusDescription = "message parameter is null";

        throw new ArgumentNullException("message", "AddMessage: message parameter is null");
    }

    using (var context = new AdnLineContext())
    {
        context.Entry(message).State = EntityState.Added;
        context.SaveChanges();
    }

    return message;
}

现在我使用RequestedRangeNotSatisfiable(HTTP 416)。但我不知道这是否是在我发布无效Message时返回的HTTP状态代码。

发布无效对象时,我必须返回哪种HTTP状态代码?

2 个答案:

答案 0 :(得分:2)

通常,您可以在管理例外时使用4xx HTTP状态代码。否则,您将生成5xx HTTP状态代码。

对于您的示例,您可以使用400 Bad Request HTTP Status code

10.4.1 400 Bad Request
The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.

来自W3C

答案 1 :(得分:0)

来自RFC7231(https://tools.ietf.org/html/rfc7231#section-6.5.1):

  

6.5.1。 400错误请求

     

400(错误请求)状态代码表示服务器不能   或者由于感知到的东西而不会处理请求   成为客户端错误(例如,格式错误的请求语法,无效   请求消息框架或欺骗性请求路由)。