亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

.NET Core Web API:返回內容類型為 application/problem+json

.NET Core Web API:返回內容類型為 application/problem+json

C#
慕仙森 2023-06-25 14:36:45
ControllerBaseConflict()包含諸如返回ConflictResult派生自 的對象(表示 HTTP 409 響應)之類的方法StatusCodeResult。生成的響應正文具有內容類型application/problem+json,如下所示:{    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.8",    "title": "Conflict",    "status": 409,    "traceId": "0HLO99QHFC9QI:00000001"}沒有用于 HTTP 410 響應的內置方法/類,因此我創建了一個:[DefaultStatusCode(410)]public class GoneResult : StatusCodeResult{    public GoneResult() : base(410)    {}}...public static class ControllerBaseExtensions{    public static GoneResult Gone(this ControllerBase controllerBase) // this doesn't give all the problem+JSON attributes    {        return new GoneResult();    }}然而,這給出了{    "type": "about:blank",    "status": 410}即,type值不同并且缺少title和字段。traceId我還想為 HTTP 500 響應創建一個自定義類,其中包含message帶有錯誤消息的字段。我嘗試過 return ,這給了我與我的方法StatusCode(StatusCodes.Status500InternalServerError)相同的最小響應;我也嘗試過 return ,這給了我錯誤消息,但將響應格式設置為.application/problem+jsonGone()StatusCode(StatusCodes.Status500InternalServerError, message)text/plain
查看完整描述

2 回答

?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

生成響應的代碼ProblemDetails不知道狀態代碼,因此在構建響應對象時410沒有關聯的Link和屬性。Title要添加此感知,請ApiBehaviorOptions在 中進行配置ConfigureServices,如下所示:

services.Configure<ApiBehaviorOptions>(options =>

{

? ? options.ClientErrorMapping[410] = new ClientErrorData

? ? {

? ? ? ? Title = "Gone",

? ? ? ? Link = "https://tools.ietf.org/html/rfc7231#section-6.5.9"

? ? };

});

ClientErrorMappingint是(狀態代碼) 到的字典ClientErrorData。請注意,我在上面使用的值Link確實指向 RFC 的正確部分。



查看完整回答
反對 回復 2023-06-25
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

簡單地說,您必須實際返回ProblemDetails響應正文。我必須仔細研究代碼才能確定,但我認為 ASP.NET Core 通過中間件執行此操作只是為了獲得特定的結果。他們4xx 范圍內的任何內容,但我認為這實際上僅限于返回該范圍內的狀態代碼的內置結果類型,而不是任何具有 4xx 狀態代碼的結果。再說一遍,這是猜測,因為我還沒有確切地了解他們在做什么,盡管它沒有作為實際結果類的一部分發生。

出于您的目的,您可以采用幾種不同的方法來處理此問題。您可以編寫自己的中間件來捕獲出站響應并重寫它們。您可以使用自定義異常處理程序。您可以簡單地繼承ObjectResult,然后ProblemDetails自己創建一個實例并將其放入基礎中。您甚至可以ProblemDetails直接從操作中返回(盡管這顯然是最不理想的方式)。


查看完整回答
反對 回復 2023-06-25
  • 2 回答
  • 0 關注
  • 216 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號