[英]How to Override 415 response in ASP.Net Core2.2
在.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"
}
我不知道這個JSON是如何產生的。 我按照下面的例子重寫json
但是我得到了不同的結果,它為原來的json添加了一個部分。 這是我的Wireshark結果
HTTP / 1.1 415不支持的媒體類型傳輸編碼:分塊
Content-Type:application / problem + json; charset = utf-8服務器:
Microsoft-IIS / 10.0 X-Powered-By:ASP.NET日期:星期一,2015年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"
}
過濾 :
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);
}
}
}
我不知道這個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;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.