2 回答
TA貢獻1829條經(jīng)驗 獲得超9個贊
生成響應(yīng)的代碼ProblemDetails不知道狀態(tài)代碼,因此在構(gòu)建響應(yīng)對象時410沒有關(guān)聯(lián)的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是(狀態(tài)代碼) 到的字典ClientErrorData。請注意,我在上面使用的值Link確實指向 RFC 的正確部分。
TA貢獻1946條經(jīng)驗 獲得超3個贊
簡單地說,您必須實際返回ProblemDetails響應(yīng)正文。我必須仔細(xì)研究代碼才能確定,但我認(rèn)為 ASP.NET Core 通過中間件執(zhí)行此操作只是為了獲得特定的結(jié)果。他們說4xx 范圍內(nèi)的任何內(nèi)容,但我認(rèn)為這實際上僅限于返回該范圍內(nèi)的狀態(tài)代碼的內(nèi)置結(jié)果類型,而不是任何具有 4xx 狀態(tài)代碼的結(jié)果。再說一遍,這是猜測,因為我還沒有確切地了解他們在做什么,盡管它沒有作為實際結(jié)果類的一部分發(fā)生。
出于您的目的,您可以采用幾種不同的方法來處理此問題。您可以編寫自己的中間件來捕獲出站響應(yīng)并重寫它們。您可以使用自定義異常處理程序。您可以簡單地繼承ObjectResult,然后ProblemDetails自己創(chuàng)建一個實例并將其放入基礎(chǔ)中。您甚至可以ProblemDetails直接從操作中返回(盡管這顯然是最不理想的方式)。
- 2 回答
- 0 關(guān)注
- 250 瀏覽
添加回答
舉報
