MVC异常过滤器 (错误页)

原创 2015年07月08日 22:26:43

控制器

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());
        }
    }
}




版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

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

MVC 自定义过滤器(Filter)可以实现路由控制、异常处理、授权处理(获取客户端信息) 由于Controller 实现了 IActionFilter 、IAuthorizationFilter、...

MVC中的自定义过滤器

过滤器的类型 ASP.NET MVC 框架支持以下几种过滤器:     1、Authorization 过滤器– 实现了 IAuthorizationFilter 接口。这一类的过滤器用来实现用户...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

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

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

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

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

Mvc全局过滤器与Action排除

如何一次性给所有action做登录验证过滤,如何排除不需要做登录验证的action

错误码

IIS状态代码的含义 概要 当用户试图通过HTTP或文件传输协议(FTP)访问一台正在运行Internet信息服务(IIS)的服务器上的内容时,IIS返回一个表示该请求的状态的数字代码。该状态代码...

Java----异常类(错误和异常,两者区别)

在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。   Throwable 有...

android开发中出现的错误集(不断更新)

23.在使用AndroidHttpClient时有如下错误: 01-16 22:18:39.222: E/AndroidHttpClient(26745): java.lang.IllegalSta...

MVC过滤器

MyActionFilterAttribute.cs类 using System; using System.Collections.Generic; using System.Linq; usin...

MVC过滤器

过滤器
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)