17.錯誤頁

  • 當頁面發生錯誤的時候,ASP.net會將錯誤信息展現出來,這樣一來很差看,二來會泄露網站的內部實現信息,給網站帶來安全隱患。所以須要定製錯誤頁,發生錯誤時顯示開發人員定製的頁面。
  • 配置web.config,配置customErrors區域
    • <customErrors mode="RemoteOnly" defaultRedirect="MyErrorPage.aspx">
    •    <error statusCode="403" redirect="NoAccess.htm"/>
    •    <error statusCode="404" redirect="FileNotFound.htm" />
    • <customErrors>
  • mode三個可選值:on:老是顯示定製錯誤頁面;off:不顯示定製錯誤頁面,直接顯示調用堆棧等異常信息;remoteonle:對於本機訪問顯示調用堆棧等異常信息,對於外部用戶的顯示定製錯誤頁面。通常設置爲remoteonly,這樣發生錯誤的話,管理員能夠在服務器的瀏覽器中看詳細錯誤信息,普通用戶看不到。能夠在定義錯誤頁中判斷Request.UserHostAddress來設置某些ip看到異常信息,能夠讀取Session,若是是管理員則能夠看到異常信息。
  • error子元素設定對於不一樣的狀態碼使用不一樣的錯誤頁,不少網站把404作成一個特殊的錯誤頁。沒有單獨設置的狀態碼錯誤則顯示defaultRedirect中指定的頁面。
  • 錯誤頁便可以使用htm頁面,也能夠使用aspx頁面。在aspx頁面中能夠用HttpContext.Current.Server.GetLastError()拿到異常對象,通常不要把異常信息顯示給用戶,而是使用異常日誌,把異常記錄起來,若是要在錯誤頁中拿到異常對象,就要在customErrors中設置redirectMode="ResponseRewrite",由於默認是客戶端重定向的,在錯誤頁中就拿不到異常對象了。

示例:html

   1.創建兩個頁面,一個爲訪問特定文件時找不到文件的出錯頁FileNotFound.htm,另外一個爲其它出錯時的錯誤頁:defaultErr.aspx。web

   2.創建ErrorTest.aspx,當運行此頁時,系統會出錯瀏覽器

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ErrorTest.aspx.cs" Inherits="企業網站.ErrorTest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
</body>
</html>

在它的page_load事件中的代碼:安全

            if (!IsPostBack)
            {
                SqlConnection conn = new SqlConnection("IP:127.0.0.1&db=tt");
                conn.Open();
            }

3.設置web.config文件服務器

<?xml version="1.0" encoding="utf-8"?>

<!--
  有關如何配置 ASP.NET 應用程序的詳細消息,請訪問
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>   
  
    <system.web>
      <customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/ErrorPages/defaultErr.aspx">
        <error statusCode="404" redirect="~/ErrorPages/FileNotFound.htm" />
      </customErrors>
        <compilation debug="true" targetFramework="4.0" />
      <httpRuntime requestValidationMode="2.0"/>
    </system.web>

</configuration>

4.當產生錯誤時,有個日記用來記錄錯誤的具體信息,在項目中創建ErrorRecords.txt文件網站

在defaultErr.aspx頁的Page_Load事件中寫入如下代碼:spa

 if (!IsPostBack)
            {
              Exception ex=  HttpContext.Current.Server.GetLastError();
              File.AppendAllText(Server.MapPath("~/ErrorRecords.txt"), ex.StackTrace);
            }

5.運行ErrorTest.aspx,會自動呈現defaultErr.aspx頁面,並會把出錯的具體信息寫到ErrorRecords.txt中。.net

相關文章
相關標籤/搜索