在Web.Config配置文件中,customErrors元素提供有關(guān)ASP.NET 應(yīng)用程序自定義錯誤消息的信息。
先看一下配置結(jié)構(gòu)的示例:
<configuration>
<system.web>
<customErrors>
<customErrors defaultRedirect="url" mode="On|Off|RemoteOnly">
<error statusCode="statuscode" redirect="url"/>
</customErrors>
必需的屬性
屬性 選項 描述
Mode 指定啟用、禁用或僅對遠程客戶端顯示自定義錯誤。
On 指定啟用自定義錯誤。如果沒有指定 defaultRedirect,用戶將看到一般性錯誤。
Off 指定禁用自定義錯誤。這允許顯示詳細的錯誤。
RemoteOnly 指定僅向遠程客戶端端顯示自定義錯誤,并向本地主機顯示 ASP.NET 錯誤。這是默認值。
可選的屬性
屬性 描述
defaultRedirect 指定發(fā)生錯誤時瀏覽器指向的默認 URL。如果沒有指定 defaultRedirect,則會顯示一般性錯誤。URL 既可以是絕對的(例如 http://www.***.com/ErrorPage.htm),也可以是相對的。相對 URL(如 /ErrorPage.htm)是相對于指定 defaultRedirect 的 Web.config 文件而言的,而不是針對產(chǎn)生錯誤的網(wǎng)頁。以波形符 (~) 開頭的 URL(如 ~/ErrorPage.htm)表示所指定的 URL 是相對于應(yīng)用程序根路徑而言的。
子標記
子標記 描述
<error> 錯誤子標記可以出現(xiàn)多次。每出現(xiàn)一次便定義了一個自定義錯誤條件。
注釋
<customErrors> 元素不適用于在 XML Web 服務(wù)中出現(xiàn)的錯誤。
示例
下例指定了 ASP.NET 應(yīng)用程序的錯誤處理頁。
<configuration>
<system.web>
<customErrors defaultRedirect="GenericError.htm"
mode="RemoteOnly">
<error statusCode="500"
redirect="InternalError.htm"/>
</customErrors>
</system.web>
</configuration>
引用 權(quán)限問題 <customErrors> 標記的“mode”屬性設(shè)置為“Off”。
權(quán)限問題標記的“mode”屬性設(shè)置為“Off”。
說明: 服務(wù)器上出現(xiàn)應(yīng)用程序錯誤。此應(yīng)用程序的當前自定義錯誤設(shè)置禁止查看應(yīng)用程序錯誤的詳細信息。
詳細信息: 若要使他人能夠從本地服務(wù)器計算機上查看此特定錯誤信息的詳細信息,請在位于當前 Web 應(yīng)用程序根目錄下的“web.config”配置文件中創(chuàng)建一個 <customErrors> 標記。然后應(yīng)將此 <customErrors> 標記的“mode”屬性設(shè)置為“RemoteOnly”。若要使他人能夠在遠程計算機上查看詳細信息,請將“mode”設(shè)置為“Off”。
<!-- Web.Config 配置文件 -->
<configuration>
<system.web>
<customErrors mode="RemoteOnly"/>
</system.web>
</configuration>
注釋: 通過修改應(yīng)用程序的 <customErrors> 配置標記的“defaultRedirect”屬性,使之指向自定義錯誤頁的 URL,可以用自定義錯誤頁替換所看到的當前錯誤頁。
<!-- Web.Config 配置文件 -->
<configuration>
<system.web>
<customErrors mode="On" defaultRedirect="mycustompage.htm"/>
</system.web>
</configuration>
今天發(fā)現(xiàn)的問題是temp文件夾沒有權(quán)限,network service權(quán)限加入解決問題
(用戶沒有訪問該文件夾的權(quán)限,給該用戶添加訪問該文件夾的權(quán)限即可)
或者是下面的情況
原因分析:服務(wù)器設(shè)置權(quán)限問題
解決方案:在iis中找到asp.net網(wǎng)站 右鍵--權(quán)限 添加network service 用戶到該目錄就可以了
或者還有另外一個解決方案:
<customErrors> 標記的 mode 屬性設(shè)置為 Off 。
把iis中設(shè)置asp.net版本為2.0
在IIS7.5中添加配置404頁面時遇到了一些問題,記錄如下:
一開始在<customError>下的<error>節(jié)點配置404不起作用,由于程序運行在IIS7.5集成模式下,經(jīng)過MSDN和GOOGLE,
發(fā)現(xiàn)需要在<system.webServer>節(jié)點中配置,
我們知道<system.web>節(jié)點是iis7.0之前版本的主要配置節(jié)點,由于在II7.0以后IIS管
道處理與ASP.NET管道處理進行了集成,這樣提高了ASP.NET的處理性能,具體這方面的資料請GOOGLE,問題隨之而來,新增加的
<system.webServer>節(jié)點中需要進行哪些修改以程序在IIS7的集成模式下能完全生效呢,主要包含以下幾個方面:
(1) <modules> -----相當于<system.web>中的<httpModules>
(2) <handlers> -----相當于<system.web>中的<httpHandlers>
(3) <customError>下的<error>----相當于<system.web>中的<httpErrors>
以上三點中,如果你的程序中有自定義的httpModules或者httpHandlers的話,那么第一點和第二點非常重要,具體資料請MSDN
明白了這些,配置也就不難了,如下:
補充說明:
errorMode有三個值,分別為Custom、DetailedLocalOnly、Detailed,
意思為對用戶與服務(wù)器端始終顯示自定義頁面、只能服務(wù)器端顯示詳細出錯信息、對用戶與服務(wù)器端始終顯示詳細出錯信息。
responseMode有File、ExecuteUrl、Redirect三個層,
分別表示使用服務(wù)器端靜態(tài)文件、可執(zhí)行的URL、URL轉(zhuǎn)向。
要注意:<httpErrors>與<customErrors>是不同的,前者主要用于處理http相關(guān)的錯誤信息,而后者主要是處理應(yīng)用程序級的錯誤頁轉(zhuǎn)向
附<customErrors>的一些細節(jié)說明:
同樣,如果Application_Error和<customerErrors>同時存在,也存在執(zhí)行順序的問題。
因為優(yōu)先級Application_Error事件> <customErrors>配置項,
所以發(fā)生應(yīng)用程序級錯誤時,優(yōu)先執(zhí)行Application_Error事件中的代碼,
如果Application_Error事件中調(diào)用了Server.ClearError()函數(shù),
<customerErrors>配置節(jié)中的defaultRedirect不起作用,因為Exception已經(jīng)被清除;
如果Application_Error事件中沒用調(diào)用了Server.ClearError()函數(shù),
錯誤頁會重新定位到defaultRedict指定的URL頁面,為用戶顯示友好出錯信息。
通過對.NET提供的以上四種錯誤處理機制的分析,我們可以把它們從不同的角度分類,便于我們理解和使用。
1.從功能上分類:
用于異常處理(Handling exceptions)是Page_Error事件和Application_Error事件;
用戶錯誤頁面重定向(Redirecting the user to an error page)的是 ErrorPage屬性 和 <customErrors>配置項。
2.從錯誤處理的范圍分類:
用于頁面級(Page level)錯誤處理的是Page_Error事件 和 ErrorPage屬性;
用于應(yīng)用程序級(Application level)錯誤處理的是Application_Error事件 和 <customErrors>配置項。
Win2008 iis7設(shè)置404錯誤返回狀態(tài)200的解決辦法:
http://theartemis.cn/article/19210
server 2008服務(wù)器中IIS7.0以上版設(shè)置404頁面方法
http://theartemis.cn/article/19230
如對本文有疑問,請?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會為你解答?。?點擊進入論壇