0

根据MicrosoftMozilla文档,415 状态码是:

微软:

HTTP_STATUS_UNSUPPORTED_MEDIA

415

服务器拒绝为请求提供服务,因为请求的实体采用所请求方法的请求资源不支持的格式。

Mozilla

HTTP 415 Unsupported Media Type 客户端错误响应代码表示服务器拒绝接受请求,因为负载格式是不受支持的格式。

为什么如果我将内容类型设置为 JSON 并将 XML 作为请求正文发送,我应该得到 415,但默认情况下却得到 400?

当请求不是有效的 JSON 格式时,获得 415 的最佳方法是什么?我使用资源过滤器实现了它,但我认为如果有其他方法,每次读取请求正文两次是一种浪费。

这是我的代码:

public class MyResourceFilter:Attribute, IResourceFilter
{
    public void OnResourceExecuting(ResourceExecutingContext context)
    {
        context.HttpContext.Request.EnableRewind();
        var requestBodyText = new StreamReader(context.HttpContext.Request.Body).ReadToEnd();
        context.HttpContext.Request.Body.Position = 0;
        try
        {
            JsonConvert.DeserializeObject<object>(requestBodyText);
        }
        catch (Exception e)
        {
            context.Result= new UnsupportedMediaTypeResult();
        }
    }

    public void OnResourceExecuted(ResourceExecutedContext context)
    {
    }
}
4

1 回答 1

3

在这种情况下返回 415 是不正确的。该状态码字面意思是服务器不支持 mime 类型,在这种情况下是application/json. 服务器非常支持该类型,因此它不会返回 415。400 Bad Request 是要返回的正确响应状态代码,因为您告诉它是 JSON,但您发送的是 XML,即您做出了错误请求

于 2018-10-16T12:42:19.250 回答