【C#】TrySkipIisCustomErrors 

以往進行 web site project 開發時,都是由後端 call api,判斷 HTTP status code 做相應的處理後,再丟到前端顯示。

前陣子改成由後端 call api 之後直接將 response 丟到前端,由前端判斷 HTTP status code 做相對應的處理。

結果發現當 status code 為 400 時,在前端總是抓不到我預期中的 response,但是 200 就可以抓的到,400 完全不知道消失到哪裡去了!!!

查了一下發現是被 IIS 吃掉了,因為 IIS 針對特定的 HTTP status code (400、403.9、411、414、500、500.11、500.14、500.15、501、503 和 505)有預設的錯誤訊息。

如果希望客製化錯誤訊息,需要在後端加入下列的 code,這樣前台就可以拿的到

Response.TrySkipIisCustomErrors = true;

我還有看到另外一種解法是加在 web.config,這個我沒有嘗試,因為加在 web.config 會影響到整個專案,而我只是特定的頁面需要客製化錯誤訊息而已。

<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>

參考資料:
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc753103(v=ws.10)
https://stackoverflow.com/questions/9985327/asp-net-web-api-httpresponseexception-400-bad-request-hijacked-by-iis
https://stackoverflow.com/questions/268592/custom-error-page-configured-in-iis-for-code-400-bad-request-is-ignored
https://weblog.west-wind.com/posts/2017/jun/01/bypassing-iis-error-messages-in-aspnet

分類: C#

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *