Asp.Net customErrors與httpErrors的區別


customErrors

  • Asp.Net級別的錯誤處理程序,只處理Asp.Net應用拋出的異常(404,403,500。。)
  • 在IIS7+的服務器依然可用(IIS7之前就引進了)
  • 靜態文件(如.jpg.htm.js等)不會被處理

httpErrors

  • IIS級別的錯誤信息處理程序,IIS根據請求指定錯誤頁面
  • 自IIS7引進
  • 處理包括ASP.NET應用及ASP.NET之外的應用(ASP.NET能管的 它會管,ASP.NET不能管得它也管)
  • 所有的文件和URL都處理

從對比中能看出 在IIS7之后  就沒必要再用customErrors了,一切httpErrors都可以辦了。

 

<httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="403" subStatusCode="-1" />
    <remove statusCode="404" subStatusCode="-1" />
    <error statusCode="403" prefixLanguageFilePath="" path="/403.png" responseMode="ExecuteURL" />
    <error statusCode="404" path="/404.aspx" responseMode="ExecuteURL" /> 
</httpErrors>

 

其實還可以用一個clear標簽代替多個remove。如下

<httpErrors errorMode="Custom" existingResponse="Replace">
    <clear />
    <error statusCode="403" prefixLanguageFilePath="" path="/403.png" responseMode="ExecuteURL" />
    <error statusCode="404" path="/404.aspx" responseMode="ExecuteURL" /> 
</httpErrors>

Note:ExecuteURL 只能用於同一個應用下的ASP.NET文件,如果想要重定向到另一個應用,或者一個完全不一樣的完整的URL,我們需要將responseMode設為Redirect。

<httpErrors errorMode="Custom" existingResponse="Replace">
  <clear />
  <error statusCode="404" path="http://www.bing.com" responseMode="Redirect"/>
</httpErrors>

現在通過不同的URL來看兩者的區別

給Web應用定義如下配置

<system.web>
    <customErrors mode="On" defaultRedirect="Error.html">
        <error statusCode="403" redirect="/Error403" />
        <error statusCode="404" redirect="/Error404" />
        <error statusCode="500" redirect="/Error500" />
    </customErrors>
</system.web>
<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL" >
    <remove statusCode="403"/>
    <remove statusCode="404"/>
    <remove statusCode="500"/>
    <error statusCode="403" responseMode="ExecuteURL" path="/Error403" />
    <error statusCode="404" responseMode="ExecuteURL" path="/Error404" />
    <error statusCode="500" responseMode="ExecuteURL" path="/Error500" />
  </httpErrors>
</system.webServer>

現在如果嘗試訪問以下鏈接,將會產生對應的錯誤

 
URL Error StatusCode
/aaaaaa  httpErrors  404
/aaaaaa.aspx customErrors  404
/aaaaaa.jpg httpErrors  404
/throw500.apx customErrors  500
/throw500 customErrors  500

 

 

 

 

 

 

  1. 一般情況 customErrors標簽上的model屬性設為RemoteOnly,httpErrors上的errorModel設為DetailedLocalOnly
  2. 如果你將某個頁面的StatusCode設為500,不要忘了設置如下屬性
context.Response.TrySkipIisCustomErrors = true;

 

 

以下是微軟官網說明:

 

https://msdn.microsoft.com/zh-cn/library/system.web.httpresponse.tryskipiiscustomerrors.aspx

TrySkipIisCustomErrors 屬性僅在您的應用程序承載在 IIS 7.0 中使用。 在 IIS 7.0 中的經典模式下運行時 TrySkipIisCustomErrors 
屬性的默認值是 true。 在集成模式下,運行時 TrySkipIisCustomErrors 屬性的默認值是 false

 

 

 

補充

errorMode有三個值,分別為Custom、DetailedLocalOnly、Detailed,意思為對用戶與服務器端始終顯示自定義頁面、只能服務器端顯示詳細出錯信息、對用戶與服務器端始終顯示詳細出錯信息。

responseMode有File、ExecuteUrl、Redirect三個層,分別表示使用服務器端靜態文件、可執行的URL、URL轉向。

注意:<httpErrors>與<customErrors>是不同的,前者主要用於處理http相關的錯誤信息,而后者主要是處理應用程序級的錯誤頁轉向。

 

 

<!-- 自定義錯誤信息 
設置 customErrors mode="On" 或 "RemoteOnly" 以啟用自定義錯誤信息,或設置為 "Off" 以禁用自定義錯誤信息。 
為每個要處理的錯誤添加 <error> 標記。 

"On" 始終顯示自定義(友好的)信息。 
"Off" 始終顯示詳細的 ASP.NET 錯誤信息。 
"RemoteOnly" 只對不在本地 Web 服務器上運行的 
用戶顯示自定義(友好的)信息。出於安全目的,建議使用此設置,以便 
不向遠程客戶端顯示應用程序的詳細信息。 
--> 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM