溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用ASP.NET 2.0錯(cuò)誤的實(shí)例分析

發(fā)布時(shí)間:2021-10-28 09:15:57 來(lái)源:億速云 閱讀:96 作者:柒染 欄目:編程語(yǔ)言

這篇文章給大家介紹使用ASP.NET 2.0錯(cuò)誤的實(shí)例分析,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

我們將通過(guò)一個(gè)簡(jiǎn)單的處理來(lái)記錄在我們的網(wǎng)站中的錯(cuò)誤和異常.我們會(huì)這樣操作:每當(dāng)遇到程序錯(cuò)誤時(shí),將使用者導(dǎo)航到一個(gè)單獨(dú)的頁(yè)面.同時(shí),錯(cuò)誤將被記錄到服務(wù)器上的一個(gè)文本文件.每當(dāng)錯(cuò)誤發(fā)生時(shí),我們將以日志的形式每天記錄.說(shuō)了這么多,讓我們來(lái)看一些代碼。

步驟一:首先創(chuàng)建一個(gè)錯(cuò)誤文件夾用于存放錯(cuò)誤日志文件.鼠標(biāo)右鍵站點(diǎn) > 創(chuàng)建新文件夾.將該文件夾命名為"Error". 如果站點(diǎn)中沒(méi)有 Web.config 文件時(shí),請(qǐng)?zhí)砑右粋€(gè). 右鍵站點(diǎn) > 添加新項(xiàng)目 > Web.config。

步驟二:現(xiàn)在我們要?jiǎng)?chuàng)建一個(gè)錯(cuò)誤處理的代碼.我們只需要右鍵站點(diǎn) > 添加新項(xiàng)目 > 選擇類(lèi). 重命名該類(lèi)為"ErrHandler.cs" ,然后單擊 "添加" 按鈕.當(dāng)你這么操作的時(shí)候,會(huì)彈出一個(gè)對(duì)話框,是否要將這個(gè)類(lèi)文件保存在"App_Code"里面,我們選擇接受。

步驟三:現(xiàn)在我們?yōu)镋rrHandler.class添加一些功能.該類(lèi)用于接受錯(cuò)誤信息并將錯(cuò)誤信息保存在一個(gè)文本文件中.每天創(chuàng)建一個(gè)這樣的文本文件.如果已經(jīng)存在相同的文件名時(shí),錯(cuò)誤信息將會(huì)追加到這個(gè)文件中.否則,就創(chuàng)建一個(gè)新文件,并將錯(cuò)誤信息寫(xiě)入該文件。

代碼看來(lái)如下:

 /// Handles error by accepting the error message 
    /// Displays the page on which the error occured
    public static void WriteError(string errorMessage)
    {
        try
        {
            string path = "~/Error/" + DateTime.Today.ToString("dd-mm-yy") + ".txt";
            if (!File.Exists(System.Web.HttpContext.Current.Server.MapPath(path)))
            {
                File.Create(System.Web.HttpContext.Current.Server.MapPath(path)).Close();
            }
            using (StreamWriter w = File.AppendText(System.Web.HttpContext.Current.Server.MapPath(path)))
            {
                w.WriteLine("\r\nLog Entry : ");
                w.WriteLine("{0}", DateTime.Now.ToString(CultureInfo.InvariantCulture));
                string err = "Error in: " + System.Web.HttpContext.Current.Request.Url.ToString() +
                              ". Error Message:" + errorMessage;
                w.WriteLine(err);
                w.WriteLine("__________________________");
                w.Flush();
                w.Close();
            }
        }
        catch (Exception ex)
        {
            WriteError(ex.Message);
        }
    }

這就是我們的ErrHandler類(lèi)了.然后我們來(lái)看看如何使用這個(gè)類(lèi)和在Page級(jí)中(Application級(jí)中)處理錯(cuò)誤。

在Page級(jí)中處理錯(cuò)誤

在Default.aspx中,從工具箱中添加一個(gè)button控件.將這個(gè)button命名為 btnError 并設(shè)置值為 "Throw Handled Exception".我們將拋出一個(gè)異常.只要我們定義了 catch 塊,當(dāng)錯(cuò)誤發(fā)生時(shí),就會(huì)被捕捉到并登記在Error文件夾中.文本文件將以當(dāng)天的日期作為文件名,不存在文件時(shí),一個(gè)新的文件將會(huì)被以下代碼所創(chuàng)建.

按鈕點(diǎn)擊操作代碼如下:

protected void btnHandled_Click(object sender, EventArgs e)
    {
        try
        {
            throw new Exception("Sample Exception");
        }
        catch (Exception ex)
        {
            // Log the error to a text file in the Error folder
            ErrHandler.WriteError(ex.Message);
        }
    }

現(xiàn)在,運(yùn)行程序,并點(diǎn)擊按鈕.因?yàn)槲覀円呀?jīng)在代碼中處理了錯(cuò)誤和記錄下了異常,你會(huì)發(fā)現(xiàn)當(dāng)點(diǎn)擊按鈕時(shí),似乎什么也沒(méi)發(fā)生.關(guān)閉程序,刷新Error文件夾,你會(huì)看到有個(gè)以今天日期為文件名的新文件被創(chuàng)建.異常已經(jīng)被成功記錄下如下所示.其中日期和時(shí)間在您的機(jī)器上會(huì)有所不同。

Log Entry : 
01/11/2008 23:33:46
Error in:http://localhost:51087/ErrorHandling/Default.aspx. Error Message:Sample Exception
__________________________

Redirecting users on unhandled errors(在未有處理錯(cuò)誤情況下重定向用戶)

讓我們看看如何在Application級(jí)上來(lái)捕捉未有錯(cuò)誤處理而發(fā)生的錯(cuò)誤,并將用戶定向到一個(gè)不同的頁(yè)面。

要捕捉到未有錯(cuò)誤處理的錯(cuò)誤,只需做以下的工作即可.添加一個(gè) Global.asax 文件(右鍵工程項(xiàng)目 > Add New Item > Glabal.asax).在當(dāng)中的 Application_Error() 方法中,增加以下代碼:

 void Application_Error(object sender, EventArgs e)
    {
        // Code that runs when an unhandled error occurs
        Exception objErr = Server.GetLastError().GetBaseException();
        string err = "Error in: " + Request.Url.ToString() +
                          ". Error Message:" + objErr.Message.ToString();
        // Log the error
        ErrHandler.WriteError(err);        
    }

我們注意到通過(guò)使用 Server.GetLastError() 函數(shù)來(lái)捕捉錯(cuò)誤.當(dāng)一個(gè)未有錯(cuò)誤處理的錯(cuò)誤發(fā)生時(shí),要將用戶重定向到不同的頁(yè)面,我們要做的是,打開(kāi)你的 Web.config 文件,并定位到 <customErrors> 標(biāo)簽處并注銷(xiāo)它.在移除注釋后,標(biāo)簽看來(lái)應(yīng)該是這樣的:

<!--
            The <customErrors> section enables configuration 
            of what to do if/when an unhandled error occurs 
            during the execution of a request. Specifically, 
            it enables developers to configure html error pages 
            to be displayed in place of a error stack trace.        -->
 
                  <customErrorsmode="RemoteOnly"defaultRedirect="GenericErrorPage.htm">
                        <errorstatusCode="403"redirect="NoAccess.htm" />
                        <errorstatusCode="404"redirect="FileNotFound.htm" />
                  </customErrors>

將:

mode="RemoteOnly"tomode="On"
defaultRedirect="GenericErrorPage.htm" to defaultRedirect="ErrorPage.aspx"

修改為:

<customErrorsmode="On"defaultRedirect="ErrorPage.aspx">
                        <errorstatusCode="403"redirect="NoAccess.htm" />
                        <errorstatusCode="404"redirect="FileNotFound.htm" />
                  </customErrors>

這個(gè)配置文件將會(huì)將用戶導(dǎo)向名為ErrorPage.aspx 的頁(yè)面.我們來(lái)創(chuàng)建這個(gè)錯(cuò)誤頁(yè)面,并顯示一些信息給用戶。

右鍵網(wǎng)站 > Add New Item > 創(chuàng)建 ErrorPage.aspx ,然后顯示一個(gè)信息在頁(yè)面中,提示用戶有個(gè)錯(cuò)誤發(fā)生了。

為了測(cè)試這個(gè)功能,我們回到 Default.aspx, 添加新的按鈕并命名為 btnUnhandled 并將文本屬性設(shè)置為 Throw Unhandled Exception.我們將使用"Divide By Zero"異常.并不去處理它.我們可以發(fā)現(xiàn)少了 catch 塊.所以當(dāng)錯(cuò)誤發(fā)生時(shí),用戶就會(huì)按照我們?cè)趙eb.confg文件中設(shè)置的重定向到 "ErrorPage.aspx".

protected void btnHandled_Click(object sender, EventArgs e)
{
      int i = 9;
      int j = 0;
      Respone.Write( i / j );
}

運(yùn)行這個(gè)程序點(diǎn)擊 "Throw Unhandled Exception" 按鈕.你會(huì)發(fā)現(xiàn)用戶被自動(dòng)地定向到了 Error 頁(yè)面.并且錯(cuò)誤也被記錄在 Error 文件夾中。

關(guān)于使用ASP.NET 2.0錯(cuò)誤的實(shí)例分析就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI