仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 607|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET网页编程之用C# .NET创立自界说毛病呈报

[复制链接]
变相怪杰 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:39:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我觉得很重要,一般所说的不重要应该指的是:你学好一种以后再学另一种就很容易了。(因为这样大家可能有一个错觉就是语言不是很重要,只要随便学一种就可以了,其实不是这样的。创立|毛病本文先容怎样在ASP.NET中产生毛病时利用VisualC#.NET代码捕捉和呼应毛病。ASP.NET改善了传统的MicrosoftActiveServerPage(ASP)中的毛病处置选项。在ASP.NET中,您可在使用程序中处置多少分歧级其余毛病。
ASP.NET中的新功效

ASP.NET在处置和呼应毛病的体例长进行了多少改善。在传统的ASP中,是用"OnErrorResumeNext"(或在Jscript顶用try-catch块)处置毛病的。大概,假如您运转的是MicrosoftInternetInformationServices(IIS)5.0,则利用ASPError工具创立自界说的毛病呈报页。但是,这些办法都有其范围性。

ASP.NET供应了在运转ASP.NET使用程序时大概呈现的毛病的多少处置和呼应级别。ASP.NET供应三种用于在呈现毛病时捕捉和呼应毛病的次要办法:page_error事务、application_error事务和使用程序设置文件(Web.config)。

本文演示怎样在ASP.NET使用程序中利用这些新功效。只管本文因为与ASP.NET间接相干而先容了怎样供应自界说毛病页和一样平常毛病呈报,可是它其实不先容其他毛病处置办法,如try-catch-finally块和大众言语运转库(CLR)非常体系。
怎样利用Page_Error事务

page_error事务供应一种捕捉在页级别呈现的毛病的办法。您能够只是显现毛病信息(正以下面的示例代码所示),也能够纪录事务或实行某个其他操纵。

备注:此示例在扫瞄器中显现具体的毛病信息,供应此示例只是为了举行申明。向使用程序的终极用户显现具体信息(特别是该使用程序在Internet上运转时)必定要当心。更得当的做法是向用户显现一条动静,告诉已产生毛病,然后将详细的毛病具体信息纪录在事务日记中。

本示例激发一个强制毛病产生在Page_Load事务中的空非常。依照以下步骤可创立将测试Page_Error事务的初始页。
依照以下步骤将名为PageEvent.aspx的新文件增加到项目中:翻开MicrosoftVisualStudio.NET。在"办理计划资本办理器"中,右键单击该项目节点,指向增加,然后单
击增加Web窗体。在称号文本框中,键进PageEvent.aspx,然后单击翻开。将以下代码增加到PageEvent.aspx中:
  1. <SCRIPTlanguage=C#runat="server">voidPage_Load(objectsender,System.EventArgse){throw(newArgumentNullException());}publicvoidPage_Error(objectsender,EventArgse){ExceptionobjErr=Server.GetLastError().GetBaseException();stringerr="[b]errorCaughtinPage_Errorevent[/b]
  2. "+"
  3. [b]errorin:[/b]"+Request.Url.ToString()+"
  4. [b]errorMessage:[/b]"+objErr.Message.ToString()+"
  5. [b]stackTrace:[/b]
  6. "+objErr.StackTrace.ToString();Response.Write(err.ToString());Server.ClearError();}</SCRIPT>
复制代码
从文件菜单中,单击保留PageEvent.aspx。右键单击该页,然后单击在扫瞄器中检察以运转该页。请注重,将依照代码标准激发和呈报毛病。
备注:您大概注重到代码收回对Server.ClearError的挪用。这将避免毛病持续到要被处置的Application_Error事务中。

别的,您还应记下@Page指令中的inherits属性。
假如已设置inherits,则必需起首天生项目,然后再扫瞄到该页。
假如不起首天生项目,将看到上面的毛病信息:
Project.PageEventisnotavalidtype
怎样利用Application_Error事务

与Page_Error事务相相似,您可以使用Application_Error事务捕捉产生在使用程序中的毛病。因为事务产生在全部使用程序局限内,因而您可纪录使用程序的毛病信息或处置其他大概产生的使用程序级其余毛病。

上面的示例基于后面的Page_Error事务代码示例,假如Page_Load事务中的毛病未在Page_Error事务中捕捉,将激发非常。application_error事务在使用程序的Global.asax文件中举行指定。为复杂起见,本节中的步骤创立一个要在个中激发非常的新页,捕捉Global.asax文件的Application_Error事务中的毛病,并将该毛病写进事务日记中。上面的步骤演示怎样利用Application_Error事务:
将名为AppEvent.aspx的新文件增加到项目中:将以下代码增加到AppEvent.aspx中:
  1. <SCRIPTlanguage=C#runat="server">voidPage_Load(objectsender,System.EventArgse){throw(newArgumentNullException());}</SCRIPT>
复制代码
从文件菜单中,单击保留AppEvent.aspx。将Application_Error事务增加到Global.asax文件中以捕捉在AppEvent.aspx页的Page_Load事务中激发的毛病。注重,您必需为System.Diagnostics称号空间将另外一条using语句增加到Global.asax,才干利用事务日记。

将以下代码增加到Global.asax文件中:
  1. usingSystem.Diagnostics;protectedvoidApplication_Error(objectsender,EventArgse){ExceptionobjErr=Server.GetLastError().GetBaseException();stringerr="ErrorCaughtinApplication_Errorevent
  2. "+"Errorin:"+Request.Url.ToString()+"
  3. ErrorMessage:"+objErr.Message.ToString()+"
  4. StackTrace:"+objErr.StackTrace.ToString();EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);Server.ClearError();//additionalactions...}
复制代码
保留Global.asax文件。在VisualStudio.NET中,在天生菜单上,单击天生。右键单击该页,然后单击在扫瞄器中检察。在这类情形下该页将为空缺,可是您应当注重到在事务日记中已增加了一个新项。本示例在使用程序日记中天生一个项,可处置件检察器会见使用程序日记。在纪录毛病以后,您大概但愿将用户重定向到另外一个更用户友爱的毛病页大概依据必要实行一些其他操纵。
怎样利用Web.config文件

假如您不挪用Server.ClearError大概捕捉Page_Error或Application_Error事务中的毛病,则将依据Web.config文件的部分中的设置处置毛病。在部分,可将重定向页指定为默许的毛病页(defaultredirect)大概依据激发的HTTP毛病代码指定特定页。您可以使用此办法自界说用户收到的毛病信息。

假如产生在使用程序之前的任一级别都未捕捉到的毛病,则显现这个自界说页。本节演示怎样修正Global.asax文件,以便从不挪用Server.ClearError。因而,毛病在作为捕捉毛病的最初一点的Web.config文件中举行处置。
从上一个示例中翻开Global.asax文件。将Server.ClearError行正文失落,以便确保毛病呈现在Web.config文件中。将所作变动保留到Global.asax中。代码看起来应相似以下情势:
  1. usingSystem.Diagnostics;protectedvoidApplication_Error(objectsender,EventArgse){ExceptionobjErr=Server.GetLastError().GetBaseException();stringerr="ErrorCaughtinApplication_Errorevent
  2. "+"Errorin:"+Request.Url.ToString()+"
  3. ErrorMessage:"+objErr.Message.ToString()+"
  4. StackTrace:"+objErr.StackTrace.ToString();EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);//Server.ClearError();//additionalactions...}
复制代码
将以下代码增加到部分,以便将用户重定向到自界说页:
  1. <CUSTOMERRORSmode="On"defaultRedirect="http://hostName/applicationName/errorStatus.htm"></CUSTOMERRORS>
复制代码
备注:必需修正defaultRedirect属性中的文件路径,以便它
援用相干的Web服务器和使用程序称号。
由于在此级别捕捉的毛病会发送到默许的毛病页,以是,
必需创立一个名为ErrorStatus.htm的毛病页。请记着,您要使
用此办法来把持向用户出现的内容,因而本示例利用.htm
页作为毛病页。将以下代码增加到ErrorStatus.htm中:
  1. <HTMLlang=utf-8xmlns="http://www.w3.org/1999/xhtml"><HEAD><METAcontent="MicrosoftVisualStudio7.0"name=GENERATOR>customErrorpage!
  2. Youhavebeenredirectedherefromthe<customErrors>sectionoftheWeb.configfile.
复制代码
若要测试该代码,请保留这些文件,天生项目,然后在扫瞄器中检察AppEvent.aspx。请注重,在激发毛病时,您将被重定向到ErrorStatus.htm页。
只管您可在部分中defaultRedirect属性的值中援用默许的毛病页,可是您还可依据激发的HTTP毛病代码指定要重定向到的特定页。子元素同意利用此选项。比方:
<P>
  1. <CUSTOMERRORSmode="On"defaultRedirect="http://hostName/applicationName/errorStatus.htm">>ERRORredirect="filenotfound.htm"statusCode="404"/></CUSTOMERRORS>
复制代码
备注:在部分的defaultRedirect中指定的页是一个.htm文件。假如您盘算在.aspx页中利用GetLastError(正如Page_Error和Application_Error示例那样),则在举行重定向之前,必需将非常存储在会话变量或某个其他办法中。

请注重,部分包含设置为On的mode属性。mode属性用于把持毛病重定向产生的体例。比方,假如您正开辟使用程序,则极可能但愿检察实践的ASP.NET毛病信息,而且不但愿被重定向到更用户友爱的毛病页。mode属性包含以下设置:
on:未被处置的非常将用户重定向到指定的defaultRedirect页。此形式次要用于临盆。off:用户收到非常信息而不是被重定向到defaultRedirect页。此形式次要用于开辟。remoteonly:只要在当地盘算机上会见该站点的用户(经由过程利用localhost)才干收到非常信息。一切其他用户都被重定向到defaultRedirect页。此形式次要用于调试。
疑问解答
在Windows2000和WindowsXP上的默许安装中,ASP.NET在帮助历程中运转Web使用程序代码。此历程的标识默许为名为ASPNET的无特权当地帐户。在ASP.NET的beta版中,该历程的标识是System,这是一个功效壮大的办理员帐户,具有很多盘算机特权。
一个很大的类库。应用程序之所以难以跨平台,在于直接调用了特定平台的接口,而一个巨大的类库,就能极大地减少应用程序对平台的依赖。
深爱那片海 该用户已被删除
沙发
发表于 2015-1-19 20:31:36 | 只看该作者
业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
谁可相欹 该用户已被删除
板凳
发表于 2015-2-3 12:33:38 | 只看该作者
大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。
第二个灵魂 该用户已被删除
地板
发表于 2015-2-9 00:22:55 | 只看该作者
HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.
若天明 该用户已被删除
5#
发表于 2015-2-26 14:47:55 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
冷月葬花魂 该用户已被删除
6#
发表于 2015-3-8 15:37:33 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。
变相怪杰 该用户已被删除
7#
 楼主| 发表于 2015-3-16 03:32:24 | 只看该作者
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
兰色精灵 该用户已被删除
8#
发表于 2015-3-22 19:35:09 | 只看该作者
对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-1-10 05:47

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表