我有一個.net網站與自定義錯誤頁使用的web.config httpErrors
部分配置:爲什麼一些'有潛在危險的Request.Path'HttpExceptions忽略httpErrors設置?
<httpErrors errorMode="Custom" existingResponse="Replace">
<clear/>
<error statusCode="400" path="/page-not-found/" responseMode="ExecuteURL" />
<error statusCode="404" path="/page-not-found/" responseMode="ExecuteURL" />
<error statusCode="500" path="/error/" responseMode="ExecuteURL" />
</httpErrors>
和
<httpRuntime requestValidationMode="2.0" targetFramework="4.5" />
當我訪問http://www.example.com/<
網站顯示正確的「找不到網頁」頁面,但是如果我訪問http://www.example.com/<a
它會顯示帶有500狀態碼響應標題的YSOD。
我已經ELMAH迷上了和這兩個URL可以預見拋出一模一樣的錯誤System.Web.HttpException: A potentially dangerous Request.Path value was detected from the client (<).
但是,爲什麼在兩個網址不處理的一樣嗎?爲什麼一個人重寫到我的自定義錯誤頁面,另一個不是?我期望從任何異常都有相同的行爲。
編輯:
我應該提到了前面,這是一把umbraco項目。我認爲這不是一個促成因素,但我創建了一個沒有依賴關係的準系統.Net項目,並且按預期工作,即兩個URL都遵循httpErrors配置。所以這一定是Umbraco特定的東西,可能是一個模塊。
我不相信這是正確的。查看堆棧跟蹤並將其與.Net [源代碼](http://referencesource.microsoft.com/#System.Web/HttpRequest.cs)進行引用,可以清楚地看到異常是在'ValidateInputIfRequiredByConfig ()'。我需要知道的是,爲什麼會拋出500狀態代碼錯誤,而不是預期的400? – Digbyswift 2015-02-14 12:10:41
一個是無效的路徑(在網址中),併產生一個400,因爲它無法找到,對吧?另一個是500,因爲它是無效輸入。代碼中拋出的代碼也反映了這一點。 – Hardrada 2015-02-14 15:24:05
不,這只是不正確的。 400是一個不好的請求,不是「未找到」,並且方法中沒有任何內容拋出500異常,只有400。最後,2612行將捕獲這兩個路徑,因此會拋出2615行。那麼拋出500是什麼? – Digbyswift 2015-02-14 16:18:27