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;

     

 

 相關參考:

Custom 404 and error pages in ASP.NET

IIS.NET  HTTP Errors

 


免責聲明!

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



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