在本文中,我们将通过一个简单的处理来记录在我们的网站中的错误和异常。我们会这样操作:每当遇到程序错误时,将使用者导航到一个单独的页面。同时,错误将被记录到服务器上的一个文本文件。每当错误发生时,我们将以日志的形式每天记录。说了这么多,让我们来看一些代码。
步骤一:首先创建一个错误文件夹用于存放错误日志文件。鼠标右键站点 > 创建新文件夹。将该文件夹命名为"Error". 如果站点中没有 Web.config 文件时,请添加一个。 右键站点 > 添加新项目 > Web.config.
步骤二:现在我们要创建一个错误处理的代码。我们只需要右键站点 > 添加新项目 > 选择类。 重命名该类为"ErrHandler.cs" ,然后单击 "添加" 按钮。当你这么操作的时候,会弹出一个对话框,是否要将这个类文件保存在"App_Code"里面,我们选择接受。
步骤三:现在我们为ErrHandler.class添加一些功能。该类用于接受错误信息并将错误信息保存在一个文本文件中。每天创建一个这样的文本文件。如果已经存在相同的文件名时,错误信息将会追加到这个文件中。否则,就创建一个新文件,并将错误信息写入该文件。
代码看来如下:
/// 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类了。然后我们来看看如何使用这个类和在Page级中(Application级中)处理错误。
在Page级中处理错误
在Default.aspx中,从工具箱中添加一个button控件。将这个button命名为 btnError 并设置值为 "Throw Handled Exception".我们将抛出一个异常。只要我们定义了 catch 块,当错误发生时,就会被捕捉到并登记在Error文件夹中。文本文件将以当天的日期作为文件名,不存在文件时,一个新的文件将会被以下代码所创建。
按钮点击操作代码如下:
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); } } |
现在,运行程序,并点击按钮。因为我们已经在代码中处理了错误和记录下了异常,你会发现当点击按钮时,似乎什么也没发生。关闭程序,刷新Error文件夹,你会看到有个以今天日期为文件名的新文件被创建。异常已经被成功记录下如下所示。其中日期和时间在您的机器上会有所不同。
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(在未有处理错误情况下重定向用户)
让我们看看如何在Application级上来捕捉未有错误处理而发生的错误,并将用户定向到一个不同的页面。
要捕捉到未有错误处理的错误,只需做以下的工作即可。添加一个 Global.asax 文件(右键工程项目 > Add New Item > Glabal.asax)。在当中的 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); } |
我们注意到通过使用 Server.GetLastError() 函数来捕捉错误。当一个未有错误处理的错误发生时,要将用户重定向到不同的页面,我们要做的是,打开你的 Web.config 文件,并定位到 <customErrors> 标签处并注销它。在移除注释后,标签看来应该是这样的:
<!-- <customErrorsmode="RemoteOnly"defaultRedirect="GenericErrorPage.htm"> |
将:
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> |
这个配置文件将会将用户导向名为ErrorPage.aspx 的页面。我们来创建这个错误页面,并显示一些信息给用户。
右键网站 > Add New Item > 创建 ErrorPage.aspx ,然后显示一个信息在页面中,提示用户有个错误发生了。
为了测试这个功能,我们回到 Default.aspx, 添加新的按钮并命名为 btnUnhandled 并将文本属性设置为 Throw Unhandled Exception.我们将使用"Divide By Zero"异常。并不去处理它。我们可以发现少了 catch 块。所以当错误发生时,用户就会按照我们在web.confg文件中设置的重定向到 "ErrorPage.aspx".
protected void btnHandled_Click(object sender, EventArgs e) { int i = 9; int j = 0; Respone.Write( i / j ); } |
运行这个程序点击 "Throw Unhandled Exception" 按钮。你会发现用户被自动地定向到了 Error 页面。并且错误也被记录在 Error 文件夹中。
相关视频
相关阅读 iPhone数据迁移怎么用 iOS 12.4数据迁移功能使用教程iqoo neo和iqoo哪个好 iqoo neo和iqoo对比一览iqoo neo手机发布会直播地址 iqoo neo发布会直播网址iPadOS beta 2下载 iPadOS beta 2固件下载地址iOS 13 beta 2下载 iOS 13 beta 2固件下载地址ios12.4beta2更新日志 ios12.4beta2更新了什么怪物猎人世界冰原iceborne多少钱 怪物猎人世界冰原iceborne收费价全境封锁2easy anti cheat错误解决方法
热门文章 没有查询到任何记录。
最新文章
什么是.NET中的TDD?ASP.NET AJAX入门简介
WebMatrix入门教程VC++2008中如何调用GetOpenFileName打开文件PlaySound函数在VC++6.0中如何播放音乐及声请问VC++回调函数怎么用
人气排行 嵌入式实时操作系统VxWorks入门教程ArrayList 与 string、string[] 的转换C#遍历整个文件夹及子目录的文件代码WebMatrix入门教程asp.net判断文件或文件夹是否存在c#判断数据NULL值的方法vc++6.0怎么写Windows简单窗口代码.net解决数据导出excel时的格式问题
查看所有0条评论>>