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 通过参数传递错误信息会显示在地址栏 
路过的朋友针对错误处理有更好的思路的欢迎建议,谢谢大家!

 

posted @ 2016-03-30 11:17  3点破面  阅读(1416)  评论(1编辑  收藏  举报