在 .net core 2.2 中,有一个默认的 json,状态码为 415,如
{
"type":"https://tools.ietf.org/html/rfc7231#section-6.5.13",
"title":"Unsupported Media Type",
"status":415,
"traceId":"8000003e-0001-f500-b63f-84710c7967bb"
}
Run Code Online (Sandbox Code Playgroud)
我不知道这个 JSON 是怎么来的。我按照下面的例子重写json
但是我得到了不同的结果,它在原始 json 中添加了一个部分。这是我的 Wireshark 结果
HTTP/1.1 415 不支持的媒体类型传输编码:分块
内容类型:应用程序/问题+json;字符集=utf-8 服务器:
Microsoft-IIS/10.0 X-Powered-By:ASP.NET 日期:2019 年 5 月 6 日星期一 09:03:56 GMT
{
"type":"https://tools.ietf.org/html/rfc7231#section-6.5.13",
"title":"Unsupported Media Type",
"status":415,
"traceId":"8000002c-0002-fb00-b63f-84710c7967bb"
}
{
"data":"this is custom message"
}
Run Code Online (Sandbox Code Playgroud)
过滤器:
public class MediaTypeResouceFilter : Attribute, IResourceFilter
{
public void OnResourceExecuting(ResourceExecutingContext context)
{
}
public void OnResourceExecuted(ResourceExecutedContext context)
{
if (context.HttpContext.Response.StatusCode == 415)
{
var jsonString = JsonConvert.SerializeObject(new { data = "this is custom message" });
byte[] data = Encoding.UTF8.GetBytes(jsonString);
context.HttpContext.Response.Body.WriteAsync(data, 0, data.Length);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道这个JSON是怎么来的。
当该[ApiController]属性应用于控制器时,它会启用错误状态代码的问题详细信息,最终将内置操作过滤器添加到该控制器的 MVC 过滤器管道中。此操作过滤器适用于所有状态代码 >= 400 并生成您所描述的 JSON 响应。
它在原始 json 中添加了一个部分
当您的MediaTypeResouceFilter.OnResourceExecuted代码运行时,我上面提到的操作过滤器已经将 JSON 写入正文。您向正文写入一个附加的 JSON 格式的字符串,该字符串只是被附加并将响应破坏为无效的 JSON。
如果您想禁止为响应写入此问题详细信息 JSON,您可以将以下内容添加到Startup.ConfigureServices代码中以抑制该功能:
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.ConfigureApiBehaviorOptions(options =>
{
options.SuppressMapClientErrors = true;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1660 次 |
| 最近记录: |