zoukankan      html  css  js  c++  java
  • ASP.net MVC自定义错误处理页面的方法

    在ASP.NET MVC中,我们可以使用HandleErrorAttribute特性来具体指定如何处理Action抛出的异常.只要某个Action设置了HandleErrorAttribute特性,那么默认的,当这个Action抛出了异常时MVC将会显示Error视图,该视图位于~/Views/Shared目录下.

      设置HandleError属性

      可以通过设置下面这些属性来更改HandleErrorAttribute特性的默认处理:

      ExceptionType.指定过滤器处理那种或哪些类型的异常,如果没有指定该属性,过滤器将会处理所有的异常.

      View.指定发生异常时过滤器要显示的视图名称.

      Master.指定视图母版的名称,如果有的话.

      Order.指定过滤器应用的顺序,如果一个Action有多个HandleErrorAttribute过滤器.

      指定Order属性

      如果某个Action设置了多个HandleErrorAttribute,Order属性可以用来确定使用哪个过滤器.其值可以设置为从-1(最高优先级)到任何正整数之间的整数来标识其优先级,值越大,优先级别越低.Order属性遵循以下规则:

      应用到Controller上的过滤器将会自动应用到该Controller的所有Action上.

      如果Controller和Action都应用了HandleErrorAttribute,那么只要Order属性值相同,将会先执行Controller上的过滤器,而后才会执行Action上的过滤器.

      对于相同Order属性的过滤器,其执行先后次序不定.

      如果没有指定Order属性,则默认为-1,这意味着该过滤器将比其他的过滤器优先执行,除非其他过滤器指定了Order为-1.

      如果有多个过滤器可适用,那么第一个可以处理该异常的过滤器会被首先调用,然后针对该异常的处理将会终结.

      在View中获取异常信息

      ASP.NET MVC框架将异常信息存储在ViewDataDictionary中来传递给Error视图,该ViewDataDictionary的Model属性即是ExceptionContext类的一个实例,这个ViewData有下面几个键:

      ActionName:目标Action方法的名称

      ControllerName:目标Controller的名称

      Exception:异常对象.

      启用自定义错误处理

      下面我们来开启用于HandleErrorAttribute过滤器的自定义错误处理,打开程序的Web.config文件,在system.web节中加入一个customErrors元素,如下所示

     


     <system.web> 
      <customErrors mode="On" defaultRedirect="Error" />
      </system.web>

      处理Error视图中的错误

      有时候在Error视图中也会发生错误,这时ASP.NET将会显示其默认的错误页面(黄底红字),为了避免这种情况的出现,我们在Web.config文件的customErrors节中来自定义错误页面,如下:


     <system.web> 
      <customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
      <error statusCode="500" redirect="/Error.htm" />
      </customErrors>
      </system.web>
  • 相关阅读:
    BigDecimal中的8中舍入模式详解
    使用二倍均值法完成红包算法
    使用Calendar类和它的子类GregorianCalendar类实现构建动态日历
    『MelodyHub』书写是对思维的缓存
    本站已接入音乐播放器API
    【LeetCode】35. 搜索插入位置
    配置NodeJs环境变量
    利用GitHub博客连接多仓库
    hexo 大型车祸现场
    随机图片API
  • 原文地址:https://www.cnblogs.com/hyl8218/p/2193953.html
Copyright © 2011-2022 走看看