c# - tag - 如何在ASP.Net中發送狀態代碼500並仍然寫入響應?



rest ihttphandler (2)

我有一個ASP.Net單文件Web服務(包含IHttpHandler實現的.ashx文件),它需要能夠作為具有500個內部服務器錯誤狀態代碼的響應返回錯誤。 在PHP中這是一個相對簡單的事情:

header("HTTP/1.1 500 Internal Server Error");
header("Content-Type: text/plain");
echo "Unable to connect to database on $dbHost";

ASP.Net(C#)等效應該是:

Context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
Context.Response.ContentType = "text/plain";
Context.Response.Write("Unable to connect to database on " + dbHost);

當然,這不能按預期工作; 相反,IIS攔截500狀態代碼,刪除我寫入Response對象的任何內容,並發送調試信息或自定義錯誤頁面,具體取決於應用程序的配置方式。

我的問題 - 如何抑制此IIS行為並直接從我的IHttpHandler實現發送錯誤信息?

這個應用程序是PHP的端口; 客戶端已經寫好了,所以我基本上堅持這個規範。 錯誤地發送200狀態代碼的錯誤不適合模具。

理想情況下,我需要以編程方式控制行為,因為這是我們要分發的SDK的一部分,而沒有任何“ 編輯此文件 ”和“ 更改此IIS設置 ”補充說明。

謝謝!

編輯 :已排序。 Context.Response.TrySkipIisCustomErrors = true是票證。 哇。


Context.Response.TrySkipIisCustomErrors = true


您可能希望設置customErrors頁面(可通過web.config進行配置)。 您可以在Session中的請求中存儲您的內容(或通過替代機制),然後配置asp.net以顯示自定義錯誤頁面,該頁面反過來顯示您的自定義輸出。

但需要注意的是:如果500是由於應用程序的基本問題(即Exception)引起的,並且您嘗試顯示依賴於asp.net的頁面(即MyCustomErrors.aspx),則可能最終一個循環。

有關更多信息,請查看此頁面





ihttphandler