如果请求在应该 ASP.Net 不是 Json,为什么核心默认返回 400



根据Microsoft和Mozilla文档,415状态代码为:

Microsoft:

HTTP_STATUS_UNSUPPORTED_MEDIA

415

服务器拒绝为请求提供服务,因为 请求的格式不受请求的资源支持 请求的方法。

莫斯拉

HTTP 415 不支持的媒体类型客户端错误响应代码 指示服务器拒绝接受请求,因为 有效负载格式采用不受支持的格式。

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

当请求不是有效的 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)
{
}
}

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

最新更新