2 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊
生成響應(yīng)的代碼ProblemDetails
不知道狀態(tài)代碼,因此在構(gòu)建響應(yīng)對(duì)象時(shí)410
沒(méi)有關(guān)聯(lián)的Link
和屬性。Title
要添加此感知,請(qǐng)ApiBehaviorOptions
在 中進(jìn)行配置ConfigureServices
,如下所示:
services.Configure<ApiBehaviorOptions>(options =>
{
? ? options.ClientErrorMapping[410] = new ClientErrorData
? ? {
? ? ? ? Title = "Gone",
? ? ? ? Link = "https://tools.ietf.org/html/rfc7231#section-6.5.9"
? ? };
});
ClientErrorMapping
int
是(狀態(tài)代碼) 到的字典ClientErrorData
。請(qǐng)注意,我在上面使用的值Link
確實(shí)指向 RFC 的正確部分。

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊
簡(jiǎn)單地說(shuō),您必須實(shí)際返回ProblemDetails
響應(yīng)正文。我必須仔細(xì)研究代碼才能確定,但我認(rèn)為 ASP.NET Core 通過(guò)中間件執(zhí)行此操作只是為了獲得特定的結(jié)果。他們說(shuō)4xx 范圍內(nèi)的任何內(nèi)容,但我認(rèn)為這實(shí)際上僅限于返回該范圍內(nèi)的狀態(tài)代碼的內(nèi)置結(jié)果類型,而不是任何具有 4xx 狀態(tài)代碼的結(jié)果。再說(shuō)一遍,這是猜測(cè),因?yàn)槲疫€沒(méi)有確切地了解他們?cè)谧鍪裁?,盡管它沒(méi)有作為實(shí)際結(jié)果類的一部分發(fā)生。
出于您的目的,您可以采用幾種不同的方法來(lái)處理此問(wèn)題。您可以編寫自己的中間件來(lái)捕獲出站響應(yīng)并重寫它們。您可以使用自定義異常處理程序。您可以簡(jiǎn)單地繼承ObjectResult
,然后ProblemDetails
自己創(chuàng)建一個(gè)實(shí)例并將其放入基礎(chǔ)中。您甚至可以ProblemDetails
直接從操作中返回(盡管這顯然是最不理想的方式)。
- 2 回答
- 0 關(guān)注
- 234 瀏覽
添加回答
舉報(bào)