• mvc 全局错误处理


     1 public static void AppErrorSet(HttpContext context, Controller errorController)
     2         {
     3             var httpContext = context;
     4             var currentController = " ";
     5             var currentAction = " ";
     6             var currentRouteData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext));
     7 
     8             if (currentRouteData != null)
     9             {
    10                 if (currentRouteData.Values["controller"] != null && !String.IsNullOrEmpty(currentRouteData.Values["controller"].ToString()))
    11                 {
    12                     currentController = currentRouteData.Values["controller"].ToString();
    13                 }
    14                 if (currentRouteData.Values["action"] != null && !String.IsNullOrEmpty(currentRouteData.Values["action"].ToString()))
    15                 {
    16                     currentAction = currentRouteData.Values["action"].ToString();
    17                 }
    18             }
    19 
    20             var ex = context.Server.GetLastError();
    21             var controller = errorController;
    22             var routeData = new RouteData();
    23             var action = "Index";
    24 
    25             if (ex is HttpException)
    26             {
    27                 var httpEx = ex as HttpException;
    28 
    29                 switch (httpEx.GetHttpCode())
    30                 {
    31                     case 404:
    32                         action = "NotFound";
    33                         break;
    34 
    35                     case 401:
    36                         action = "AccessDenied";
    37                         break;
    38                 }
    39             }
    40 
    41             httpContext.ClearError();
    42             httpContext.Response.Clear();
    43             httpContext.Response.ContentType = "text/html";
    44             httpContext.Response.StatusCode = ex is HttpException ? ((HttpException)ex).GetHttpCode() : 500;
    45             httpContext.Response.TrySkipIisCustomErrors = true;
    46 
    47             routeData.Values["controller"] = "Error";
    48             routeData.Values["action"] = action;
    49 
    50             controller.ViewData.Model = new HandleErrorInfo(ex, currentController, currentAction);
    51             ((IController)controller).Execute(new RequestContext(new HttpContextWrapper(httpContext), routeData));
    52         }
    View Code
     1 public class ErrorController : Controller
     2   {
     3     public ActionResult Index()
     4     {
     5       return View();
     6     }
     7 
     8     public ActionResult NotFound()
     9     {
    10       return View();
    11     }
    12 
    13     public ActionResult AccessDenied()
    14     {
    15       return View();
    16     }
    17   }
    View Code
     1 public class MvcApplication : System.Web.HttpApplication
     2     {
     3       
     4         protected void Application_Start()
     5         {
     6             //AreaRegistration.RegisterAllAreas();
     7 
     8             //RegisterGlobalFilters(GlobalFilters.Filters);
     9             //RegisterRoutes(RouteTable.Routes);
    10             AreaRegistration.RegisterAllAreas();
    11 
    12             WebApiConfig.Register(GlobalConfiguration.Configuration);
    13             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    14             RouteConfig.RegisterRoutes(RouteTable.Routes);
    15             BundleConfig.RegisterBundles(BundleTable.Bundles);
    16             AuthConfig.RegisterAuth();
    17 
    18             //对象映射列表
    19             AutoMapperConfig.MapperConfig();
    20         }
    21 
    22         /// <summary>
    23         /// 这里处理 mvcApplication 外的异常 mvc 框架边界外的
    24         /// </summary>
    25         /// <param name="sender"></param>
    26         /// <param name="e"></param>
    27         protected void Application_Error(object sender, EventArgs e)
    28         {
    29 
    30             AppError.AppErrorSet(((MvcApplication)sender).Context,new ErrorController());
    31             
    32         }
    33     }
    View Code

    在系统Application_Error 中定义的全局错误处理方法。这里可以处理 mvc 框架边界外的系统异常

    没有 页面 302跳转的问题。404 500 http状态码也是正常显示。

    errorController 中的view  在ie下 页面字节数 长度需要达到一定长度 ie才正常显示。不然会跳转到ie默认 404 页面

  • 相关阅读:
    Android -- 自定义View小Demo,动态画圆(一)
    Android -- 自定义View小Demo,绘制四位数随机码(一)
    Android设计模式---观察者模式小demo(一)
    Android -- 自定义View小Demo,绘制钟表时间(一)
    Android -- 自定义View小Demo,关于Rect绘制Android机器人(一)
    Android -- 自定义View小Demo,关于Path类的使用(一)
    Android -- 自定义View小Demo(一)
    Android -- 自定义View(一)
    自定义Scrollview--实现仿淘宝Toolbar透明度渐变效果
    究竟什么是技术——非科班程序员两年的内心挣扎
  • 原文地址:https://www.cnblogs.com/wilsonjw/p/3620658.html
Copyright © 2020-2023  润新知