asp.net mvc全局错误处理

方式一:全局捕获异常 根据错误编码直接跳转到对应静态页面

1,在Global.asax.cs文件中添加错误处理方法Application_Error 代码如下

protected void Application_Error(object sender, EventArgs e)
{
            Exception exception = Server.GetLastError();
            Log.Error(exception); //记录日志信息
            var httpStatusCode = (exception as HttpException)?.GetHttpCode() ?? 700; //如果为空则走自定义
            var httpContext = ((MvcApplication)sender).Context;
            httpContext.ClearError();

            #region 直接跳转到对应错误页面
            switch (httpStatusCode)
            {
                case 404:
                    httpContext.Response.Redirect("/Error/404.html");
                    break;
                default:
                    httpContext.Response.Redirect("/Error/500.html");
                    break;
            }
            #endregion
}

2,根据错误编码新建对应的静态页面

-

方式二:全局捕获异常 路由到指定页面处理

优点 :在错误页可显示详细错误信息
缺点:需要有新的路由支持(控制器 ,action ) 代码如下

步骤1,在Global.asax.cs文件中添加错误处理方法Application_Error 代码如下

protected void Application_Error(object sender, EventArgs e)
        {
            Exception exception = Server.GetLastError();
            Log.Error(exception); //记录日志信息
            var httpStatusCode = (exception as HttpException)?.GetHttpCode() ?? 700; //如果为空则走自定义
            var httpContext = ((MvcApplication)sender).Context;
            httpContext.ClearError();

            #region 重定向到错误处理控制器
            var routeDic = new RouteValueDictionary
            {
                {"controller", "Error"},
                {"error", exception}
            };
            httpContext.Response.RedirectToRoute("Default", routeDic);
            #endregion
        }

  

步骤2,新建对应的错误处理控制器或方法

注:这里面可以用一个方法处理 然后把错误编码也通过参数传进来 进行区分跳转页面或显示异常信息

也可以根据错误编码建立多个方法 在步骤1中根据错误编码路由到不同的方法进行显示

public class ErrorController : Controller
    {
        public ActionResult Index(string error)
        {
            ViewBag.Summary= "WebSite 网站内部错误";
            ViewBag.Description = error;
            return View();
        }
        //public ActionResult HttpError404(string error)
        //{
        //    ViewData["Title"] = "HTTP 404- 访问的页面不存在";
        //    ViewData["Description"] = error;
        //    return View();
        //}
    }

不足之处:
步骤2 通过参数传递错误信息会显示在地址栏 
路过的朋友针对错误处理有更好的思路的欢迎建议,谢谢大家!

时间: 2024-07-29 17:24:09

asp.net mvc全局错误处理的相关文章

ASP.NET MVC编程——错误处理与日记

ASP.NET MVC的错误处理应考虑到这几个方面:模型绑定期间发生的错误,未能路由到指定操作,针对控制器的错误处理.使用配置文件可以帮助我们处理异常,但是不够灵活和全面:使用HandleErrorAttribute.自定义错误过滤器或重写控制器OnException方法只能解决针对控制器的错误,无法解决模型绑定期间发生的错误,也无法处理404错误,即使将错误过滤器注册为全局过滤器也是如此.有时候需要多种方法配合使用. 在捕获错误的地方,可以将有用的信息记录下来,便于我们查出引起问题的原因和纠正

ASP.NET MVC 出现错误 “The view 'XXX' or its master was not found or no view engine support”

来自:http://www.dengyukeji.com/archiver/tid-151.html 错误如下:The view 'XXX' or its master was not found or no view engine supports the searched locations. The following locations were searched: ~/Views/XXX/XXX.aspx ~/Views/XXX/XXX.ascx ~/Views/Shared/XXX.

ASP.NET MVC 全局过滤器(FilterConfig)、标记在控制器上和方法上的筛选器执行顺序

原文:ASP.NET MVC 全局过滤器(FilterConfig).标记在控制器上和方法上的筛选器执行顺序 FilterConfig->控制器上的筛选器-->方法上的筛选器(大-->小,上-->下) 全局-->控制器->个别 尝试的时候记得把返回true 1 protected override bool AuthorizeCore(HttpContextBase httpContext) 2 { 3 //return base.AuthorizeCore(httpC

ASP.net MVC自定义错误处理页面的方法

在ASP.NET MVC中,我们可以使用HandleErrorAttribute特性来具体指定如何处理Action抛出的异常.只要某个Action设置了HandleErrorAttribute特性,那么默认的,当这个Action抛出了异常时MVC将会显示Error视图,该视图位于~/Views/Shared目录下. 设置HandleError属性 可以通过设置下面这些属性来更改HandleErrorAttribute特性的默认处理: ExceptionType.指定过滤器处理那种或哪些类型的异常

asp.net mvc 全局权限过滤器及继成权限方法

全局权限过滤器 //----------------------------------------------------------------------- // <copyright file="PermissionFilter.cs" company="STO EXPRESS, Ltd."> // Copyright (c) 2015 , All rights reserved. // </copyright> //--------

ASP.NET MVC中错误日志信息记录

MVC中有一个处理异常的过滤器 HandleErrorAttribute 1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法 public class MyExceptionAttribute:HandleErrorAttribute { /// <summary> /// 可捕获异常数据 /// </summary> /// <param name="filterContext"></par

ASP.NET MVC 自定义错误页面心得

自定义错误页面的目的,就是为了能让程序在出现错误/异常的时候,能够有较好的显示体验. 所以,首先要先了解,我们可以在哪里捕获异常. 当程序发生错误的时候,我们可以在两个地方捕获: Global里面的Application_Error . HandleErrorAttribute 中的OnException.(需要新建一个类,继承HandleErrorAttribute) 那我们到底应该在哪里处理错误好呢?下面我来给大家说说他们的区别. Application_Error 程序中发生的所有异常,都

【转】ASP.NET MVC中错误日志信息记录

MVC中有一个处理异常的过滤器 HandleErrorAttribute 1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法 public class MyExceptionAttribute:HandleErrorAttribute { /// <summary> /// 可捕获异常数据 /// </summary> /// <param name="filterContext"></par

Asp.net MVC 自定义错误页面以及return HttpNotFound遇到的问题

今天在处理mvc 项目404和500页面时,发现我以前比较喜欢用的Return HttpNotFound()没有跳转到我在webconfig中配置的自定义404页面,而且也不会去执行Global中的Application_Error方法,经过一番查阅资料,发现这个问题得去想别的办法去做,具体的做法有三种,如下: 1.放弃Return HttpNotFound(),适用throw new HttpException(404, "page not found"); 2.让所有的Contro