关闭

MVC异常过滤器 (错误页)

2222人阅读 评论(0) 收藏 举报
分类:

控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MVC过滤器.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index(string id, string name)
        {
            int a = 1;
            int b = 0;
            int c = a / b; //这里人为的搞一个错误。
            return View();
        }

        public ActionResult Error()
        {
            return View();
        }

    }
}

Home控制器下的的Error视图

@{
    Layout = null;
}
@model HandleErrorInfo  
@*这个HandleErrorInfo实体类里面就是当前最后一次错误的详细信息*@
<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Error</title>
</head>
<body>
    <div>
        @Model.ActionName;  
        @Model.ControllerName;
        @Model.Exception.Message;
    </div>
</body>
</html>

在项目下建一个Filters的文件夹,用来放过滤器。

在Filters文件夹下面新建一个ExceptionAttribute.cs异常过滤器类,让它继承HandleErrorAttribute类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MVC过滤器.Filters
{
    public class ExceptionAttribute:HandleErrorAttribute
    {
       
        public override void OnException(ExceptionContext filterContext)
        {
            //获取抛出异常的对象
            Exception ex = filterContext.Exception;
           
            //写日记
             System.IO.File.AppendAllText(filterContext.HttpContext.Server.MapPath("/Logs/Log.txt"), ex.ToString());

            //如果这里设为false,就表示告诉MVC框架,我没有处理这个错误。然后让它跳转到自己定义的错误页(设为true的话,就表示告诉MVC框架,异常我已经处理了。不需要在跳转到错误页了,也部会抛出黄页了)
            filterContext.ExceptionHandled = false;  
                        
        }
    }
}

去到APP_Start文件夹下的FilterConfig.cs类中,去将自己定义的ExceptionAttribute异常过滤器注册为全局过滤器

using MVC过滤器.Filters;
using System.Web;
using System.Web.Mvc;

namespace MVC过滤器
{
    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {

            filters.Add(new HandleErrorAttribute());

            //将自己定义的异常过滤器注册为全局过滤器。(全局过滤器是可以注册多个的)
            filters.Add(new ExceptionAttribute());
        }
    }
}




0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

基于过滤器实现异常处理的探索

正如你所看到的那样,今天我想和大家聊聊异常处理这个话题。对于异常处理这个话题,我相信大家都有各自的方法论。而我今天想和大家探讨的这种异常处理方案,我将其称之为基于过滤器的异常处理。我不知道这种定义是否...
  • qinyuanpei
  • qinyuanpei
  • 2017-05-28 12:41
  • 1375

MVC中的错误-友好的处理方法

MVC中,有一个Filter可以捕捉错误,但是它的用法是利用Attribute来实现的,而且只能加在Controller和Action上,所以不能捕捉别出的错误其实理论上所有的错误肯定产生于Contr...
  • lizhao1226
  • lizhao1226
  • 2011-04-27 17:12
  • 7872

【MVC】错误页面设置和错误信息记录

一、自定义错误页面   有些时候,我们想使用自定义的错误页面,该怎么处理那。 翻页其他大牛写的博客,看到有这种方式,自定义属性Class继承FileterAttribute, 重写OnExceptio...
  • qq_32688731
  • qq_32688731
  • 2017-08-15 22:59
  • 325

.net MVC 自定义异常错误页需要注意的地方

ASP.Net MVC3中如果配置文件出错了,怎么跳转到自定义的错误页,现在参考网上的档案是说 添加 如下配置文件,并且在路径Views/Shared/下添加Error页面,测试下没有用的,请大...
  • zjlovety
  • zjlovety
  • 2015-09-25 16:51
  • 10938

MVC 自定义过滤器(Filter)实现路由控制、异常处理、授权处理(获取客户端信息)

MVC 自定义过滤器(Filter)可以实现路由控制、异常处理、授权处理(获取客户端信息) 由于Controller 实现了 IActionFilter 、IAuthorizationFilter、...
  • zy0421911
  • zy0421911
  • 2017-02-07 17:01
  • 1191

ASP.NET MVC中的统一化自定义异常处理

当ASP.NET MVC程序出现了异常,怎么处理更加规范? 1. 最简单的方法是设置节点 节点用于定义一些自定义错误信息的信息。此节点有Mode和defaultRedirect两个属性,其中def...
  • sundacheng1989
  • sundacheng1989
  • 2013-05-31 15:12
  • 16804

MVC过滤器使用案例:统一处理异常顺道精简代码

MVC过滤器使用案例:统一处理异常顺道精简代码 1.MVC过滤器 从方法2使用Attribute的思路很容易就能想到MVC的过滤器,利用过滤器的拦截功能能很好的按照AOP思想实现异常处理,并解耦于...
  • lcj19910302
  • lcj19910302
  • 2016-04-06 17:12
  • 1834

MVC过滤器使用案例:统一处理异常顺道精简代码

重构的乐趣在于精简代码,模块化设计,解耦功能……而对异常处理的重构则刚好满足上述三个方面,下面是我的一点小心得。 一、相关的学习 在文章《精简自己20%的代码》中,讨论了异常的统一处理,并...
  • yb1993
  • yb1993
  • 2014-10-11 08:44
  • 338

针对400错误使用Spring MVC HandlerExceptionResolver处理异常

昨天晚上一个action设置了大对象,但是提交一直提交不过去,后台也没有任何报错,最后在网上搜索了,使用HandlerException才捕获到此错误,具体文章如下:pring MVC的确很强大,在每...
  • luo_yifan
  • luo_yifan
  • 2017-07-31 18:13
  • 390

Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志

在使用SimpleMappingExceptionResolver实现统一异常处理后(参考Spring MVC的异常统一处理方法),发现出现异常时,log4j无法在控制台输出错误日志。因此需要自定义一...
  • zouqingfang
  • zouqingfang
  • 2016-01-12 15:29
  • 3376
    个人资料
    • 访问:861968次
    • 积分:13112
    • 等级:
    • 排名:第1190名
    • 原创:472篇
    • 转载:26篇
    • 译文:2篇
    • 评论:76条
    最新评论