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));
            }
  • 相关阅读:
    区块链中的随机数 nonce
    SaaS(软件即服务)、PaaS(平台即服务)、IaaS(基础架构即服务)、BaaS(区块链即服务)
    程序插桩简介
    侧链技术
    闪电/雷电网络
    Ubuntu16.04安装/升级openssl到1.1版本
    Ubuntu16.04升级Python3及其pip3并切换为默认版本
    Python——/usr/bin/env: ‘python(3) ’: No such file or directory
    TCP通信功能 (agent功能)
    gin框架web操作数据库
  • 原文地址:https://www.cnblogs.com/luminji/p/2122533.html
Copyright © 2011-2022 走看看