• 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));
            }
  • 相关阅读:
    applications_manager很经典的应用性能监控工具
    eureka分区的深入讲解
    Spring Boot 微服务应用集成Prometheus + Grafana 实现监控告警
    solidity 学习笔记(3) 函数修饰符/继承
    以太坊
    solidity 学习笔记 2 (二维数组)
    solidity学习笔记
    女巫攻击---针对联盟链的攻击
    区块链知识点
    [转]PBFT 算法详解
  • 原文地址:https://www.cnblogs.com/luminji/p/2122533.html
Copyright © 2020-2023  润新知