zoukankan      html  css  js  c++  java
  • MVC TIP4:为捕获路由及通用异常处理

    对于未路由到的URL,可以如下处理。

    1:首先,准备控制器

        public class ErrorController : Controller
        {
            public ActionResult Index(string error)
            {
                ViewData["Title"] = "WebSite 网站内部错误";
                ViewData["Description"] = error;
                return View("Index");   //全部路由到Error下的Index视图
            }
            public ActionResult HttpError404(string error)
            {
                ViewData["Title"] = "HTTP 404- 无法找到文件";
                ViewData["Description"] = error;
                return View("Index");
            }
            public ActionResult HttpError500(string error)
            {
                ViewData["Title"] = "HTTP 500 - 内部服务器错误";
                ViewData["Description"] = error;
                return View("Index");
            }
            public ActionResult General(string error)
            {
                ViewData["Title"] = "HTTP 发生错误";
                ViewData["Description"] = error;
                return View("Index");
            }  
        }

    2:Error下的Index视图

    image

    代码:

    image

    3:在Global.aspx中进行处理

    添加如下方法:

            protected void Application_Error(object sender, EventArgs e)
            {
                Response.Clear();
                Exception exception = Server.GetLastError();
                HttpException httpException = exception as HttpException;
                RouteData routeData = new RouteData();
                routeData.Values.Add("controller", "Error");
                if (exception == null)
                {
                    routeData.Values.Add("action", "Index");
                }
                else if (httpException == null)
                {
                    routeData.Values.Add("action", "Index");
                }
                else
                {
                    switch (httpException.GetHttpCode())
                    {
                        case 404:
                            routeData.Values.Add("action", "HttpError404");
                            break;
                        case 500:
                            routeData.Values.Add("action", "HttpError500");
                            break;
                        default:
                            routeData.Values.Add("action", "General");
                            break;
                    }
                }
                // Pass exception details to the target error View.  
                routeData.Values.Add("error", exception.Message);
                // Clear the error on server.  
                Server.ClearError();
                // Call target Controller and pass the routeData.  
                IController errorController = new ErrorController();
                errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
            }
  • 相关阅读:
    《反恐精英》VS《使命召唤》
    CSS中expression简介实现对象批量控制
    asp无组件上传文件超过200k就提示错误的解决方法
    IE和Firefox的js兼容性整理
    国外优秀的屏幕录象专家
    陆游和唐婉
    机器智能将会在2029年达到人类的水平
    WinXP中有趣的特殊文件夹
    二行代码解决全部网页木马(含iframe/script木马)
    Javascript 获取页面高度(多种浏览器)
  • 原文地址:https://www.cnblogs.com/luminji/p/2122533.html
Copyright © 2011-2022 走看看