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));
            }
  • 相关阅读:
    不怕上不了 Android developers
    不花钱的可靠性设计
    linux2.6 内核特性配置
    Linux动态库的编译与使用 转载
    多线程使用互斥锁的C范例
    TSLIB 分析
    Notepad++中文版下载 以及HEX显示
    C程序实现在lcd 上全屏写 blue 色 及获取fb信息
    pthread_cond_wait的spurious wakeup问题
    查看linux内存条数的命令与清理内存使用
  • 原文地址:https://www.cnblogs.com/luminji/p/2122533.html
Copyright © 2011-2022 走看看