宝哥软件园

在ASP中自定义错误页面 在MVC下显示错误页面 网

编辑:宝哥软件园 来源:互联网 时间:2021-09-03

错误在网站运营中是不可避免的,错误页面的生成也是不可或缺的。

这几天看了很多博主的文章,想总结一下自己在实践中学到的东西和配置。

首先,我们需要知道错误页面的来源,一个是由我们抛出的。NET平台,另一个由网站所依赖的主机抛出。一般来说,我们所依赖的主机是IIS。

IIS中的错误页面条目:

错误代码一定不陌生

这是在服务器上找不到所需资源时引发的错误页面。您可以将错误页面设置为在此显示,只需将预定的错误页面添加到服务器,然后在指定的状态代码下配置路径。

这是当请求在IIS中时,它还没有完全进入ASP.NET的mvc。在这里,我们需要了解什么是不完全录入。在IIS7版本中,它不依赖于请求路径末端的标识信息,使用mvc中的urlRoutingModule进行处理。当我们配置MVC的路由时,第一个:

路线。忽略重路由(' {resource})。axd/{ * PathInfo } ');它是为了隔离那些不在mvc中使用的文件。如果只请求服务器上的文件,将在此过滤路由,使它们与特定的路由信息不匹配。

我刚和mvc打了招呼就走了。我进入mvc不是为了做事。

第二,我们进入了ASP.NET MVC的管辖范围,然后犯了一个错误,就是跳到了程序中配置的错误页面。

首先,我将谈谈我从我的博主那里学到和看到的一些方法。

第一个是通过web.config中的customError配置的.

customerrors mode=' on ' default redirect=' ~/error page '错误状态代码=' 404 ' redirect=' ~/error/error page 404 '//customerrors,但是这种方法不是很能接受,太简单了,没有任何异常信息,有时候也行不通,所以我不是很喜欢。

这是用一个框架打包的,通过后面要描述的第三种强大的方式来实现。当异常发生且无法捕获时,第三种方式最终自动实现。

第二,使用HandlerErrorAttribute特性和AOP模式,当出现异常时,它将进入注册的ExceptionAttribute责任,具体实现这个特性。

命名空间刺客。web . core . filter {///summary////异常处理以消息队列////summary公共类MyExceptionAttribute : handleerrattribute { public static QueueException exception queue=new QueueException();public override void one exception(exception context filter context){ exception queue。入队(过滤器上下文。例外);filterContext。HttpContext . response . redirect(~/error page/CustomErrorPage’);基地。OnException(filter context);}}}在这里,我可以得到异常信息,也可以分析具体的报错原因,比如404,500.通过这种情况,我可以将其转移到不同的自定义错误页面,并且我在这里添加了一个控制器。

CustomErrorPageController是专门用来存储错误页面的,Shared下原有的Error.cshtml错误页面依然存在。

我更喜欢这种方式,因为我可以看到异常信息,然后我可以设计出需要跳转的错误页面。

第三种方式也是最强大的,俗称‘最后一道防线’,从全局层面捕捉异常的Application_Error

网站第一次启动时,会执行一个特殊的动作,先执行Application_start,只初始化一次。这也是应用程序中的一个事件。

////摘要://发生在ASP.NET向客户端发送HTTP头之前。公共事件event handler PreSendRequestHeaders;////抽象: //当选择处理程序来响应请求时发生。公共事件EventHandler MapRequestHandler////抽象: //在应用程序发布时发生。公共事件事件处理程序已处置;////抽象: //作为HTTP管道链中的第一个事件,当ASP。NET的请求得到响应。公共事件EventHandler BeginRequest////摘要: //在安全模块建立用户ID后出现。公共事件event handler AuthenticateRequest;////摘要: //在安全模块建立用户ID后出现。公共事件event handler post authenticaterequest;////抽象: //当安全模块已经验证了用户身份验证时发生。公共事件EventHandler AuthorizeRequest////抽象: //当前请求的用户被授权时发生。公共事件EventHandler PostAuthorizeRequest////抽象: //当ASP.NET完成授权事件以便从缓存中请求提供服务的缓存模块时发生,由跳过的事件处理程序(例如,页面或XML Web服务)执行。公共事件event handler ResolveRequestCache;////抽象://ASP.NET将绕过当前事件处理程序的执行,并允许缓存模块处理来自缓存的请求。公共事件event handler PostResolvequestcache;////摘要://发生在ASP.NET向客户端发送内容之前。公共事件event handler Presendrequestcontent;////抽象: //当ASP.NET映射到相应事件处理程序的当前请求时出现。公共事件事件处理程序PostMapRequestHandler////摘要: //系统。当ASP.NET完成事件处理程序时,就会发生事件。公共事件EventHandler PostLogRequest////抽象: //当与请求关联的托管对象被释放时发生。公共事件事件处理程序请求已完成;////抽象: //当获得与当前请求相关联的请求状态(例如,会话状态)时发生。公共事件event handler post acquisitequeststate;////抽象://发生在ASP.NET开始执行事件处理程序(例如,页面或XML Web服务)之前。公共事件事件处理程序PreRequestHandlerExecute////抽象: //当ASP.NET事件处理程序(例如,页面或XML Web服务)完成执行时发生。公共事件事件处理程序PostRequestHandlerExecute////抽象://在ASP.NET完成执行所有请求事件处理程序后发生。此事件导致状态模块保存当前状态数据。公共事件event handler releaserequest state;////抽象: //当ASP.NET完成执行所有请求事件处理程序并存储数据的请求状态时发生。公共事件事件处理程序PostReleaseRequestState////抽象: //当ASP.NET完成执行事件处理程序,以便缓存模块存储响应以服务于来自缓存的后续请求时发生。公共事件事件处理程序更新请求缓存;////抽象: //当ASP.NET完成更新缓存模块并存储响应以服务于来自缓存的后续请求时发生。公共事件event handler post updaterequest cache;////摘要://在ASP.NET对当前请求执行任何日志记录之前发生。公共事件事件处理程序日志请求;////摘要: //当ASP.NET获得与当前请求相关联的当前状态(例如,会话状态)时。公共事件EventHandler收购请求状态;////抽象: //作为HTTP管道链中的最后一个事件,当ASP。NET的请求得到响应。

公共事件EventHandler EndRequest////抽象: //当引发未处理的异常时发生。公共事件事件处理程序错误;看到最后一个事件是最后一道防线,该事件在引发未处理的异常时发生。如果异常没有被aop捕获,那么将出现Application _Error。

我们可以在Global.asax中编写这个方法

///summary ///可以完成全局异常处理。////summary////param name=' sender '/param///param name=' e '/param protected void application _ error(对象sender,EventArgs e){//code var error=Server。发生未处理的错误时运行的GetLastError();var代码=(错误为HttpException)?(错误为HttpException)。GetHttpCode(): 500;//如果不是HttpException,记录错误消息if(代码!=404) {//错误消息记录在邮件或日志中此处}响应。写入('错误');服务器。ClearError();字符串路径=请求。路径;语境。重写路径(字符串。格式(' ~/Errors/Http{0} ',代码),false);IHttpHandler Httphandler=new mvchtphandler();httpHandler。ProcessRequest(上下文);语境。重写路径(路径,假);}在这个方法中,我们还可以获取异常信息、记录日志或电子邮件通知。

您也可以根据错误代码跳转到错误的页面。

您还可以向当前错误页面添加附加信息。

非常强大。

如果未编写此方法,则使用框架封装的默认方法。当在web.config中配置customError节点时,此方法用于帮助处理它。

也许有更多更好的方法。找指导,我想学习。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+