当前位置:首页 > 后端开发 > 一种mvc下处理异常的与http错误的方法

一种mvc下处理异常的与http错误的方法

6个月前 (05-26)41

很多网站如果由于用户输入错了地址,出现了如下图的网页

一种mvc下处理异常的与http错误的方法 _ Java侠

 

又或者网站的bug导致的应用程序异常,搞出来个满屏的红黄黑,

一种mvc下处理异常的与http错误的方法 _ Java侠

出现类似情况一定让用户大跌眼镜,个人认为,http错误与应用程序异常的处理方式应该是我们所需关注的问题。

解决方案

1.定义1个枚举类型用来存储http错误码,与应用程序异常错误

    public enum DictSystemErrorType
    {
        /// <summary>
        /// 系统错误
        /// </summary>
        SystemError = 1,
        /// <summary>
        /// 系统异常
        /// </summary>
        SystemException = 2,
        /// <summary>
        /// 404错误
        /// </summary>
        Http404Error = 404,
        /// <summary>
        /// 500错误
        /// </summary>
        Http500Error = 500
    }

2.定义SystemErrorCollection静态类用来管理错误提示信息

    public static class SystemErrorCollection
    {
        private static readonly IDictionary<int, string> SystemMsg = new Dictionary<int, string>
                                                               {
                                                                   {1,"系统错误,请联系管理员!"},
                                                                   {2,"系统出现异常,请联系管理员!"},
                                                                   {404,"404错误,Really very sorry,The page not found!"},
                                                                   {500,"500错误,Internal Server Error!"},
                                                               };
        /// <summary>
        /// 获取错误提示
        /// </summary>
        /// <param name="errCode"></param>
        /// <returns></returns>
        public static string GetSystemErrorMsg(int  errCode)
        {
            return SystemMsg.SingleOrDefault(p => p.Key == errCode).Value;
        }
    }

3.mvc下Global.asax文件和webForm下的一样,都继承自System.Web.HttpApplication,

 他们都包含Application_Error事件(当应用程序中遇到一个未处理的异常时,该事件被触发。

 定义Application_Error事件处理错误与异常

        protected void Application_Error(object sender, EventArgs e)
        {
            Exception exception = Server.GetLastError();
            Response.Clear();

            var httpException = exception as HttpException;
            int errorCode = httpException == null ? (int)DictSystemErrorType.SystemException : httpException.GetHttpCode();

            //记录log  ...
            //发送错误邮件给网站管理人员  ...

            var routeData = new RouteData();
            routeData.Values.Add("controller", "Error");
            routeData.Values.Add("action", "error");
            routeData.Values.Add("errorCode", errorCode);
            Server.ClearError();

            IController errorController = new ErrorController();
            errorController.Execute(new RequestContext(new HttpContextWrapper(this.Context), routeData));
        }

4.添加ErrorController与Error Action

    public class ErrorController : Controller
    {
        //
        // GET: /Error/

        public ActionResult error()
        {
            int errorCode = (int)(this.RouteData.Values["errorCode"] ?? DictSystemErrorType.SystemError);
            ViewData["errorMsg"] = SystemErrorCollection.GetSystemErrorMsg(errorCode);
            return View();
        }
    }

 杂谈

为方便管理错误码与提示信息,定义了枚举类型与一个IDictionary字典。

然而同时维护这两个东西着实有些不变,还好可以通过反射取得枚举的提示信息

 不过最好把错误提示信息对应错误码持久化到数据库或者xml文件中,然后将其缓存起来。

如此可随时更新错误信息,无需修改程序。

 

IController是很简单的,它主要的用途在于提供了关于路由的工具来找到控制器并调用执行(Execute)

Controller的HandleUnknownAction:控制器找不到相关的Action将会呼叫 HandleUnknownAction

另外值得注意的是:

mvc下如果你的某个Controller或者自定义基类的controller重写了HandleUnknownAction方法,

那么出现http404错误的话,该Controller执行完HandleUnknownAction,将不会再执行Application_Error!


本文源妈

作者:曼阳
来源链接:https://www.cnblogs.com/RoyMing/archive/2010/07/14/1777654.html

标签: 异常处理

“一种mvc下处理异常的与http错误的方法” 的相关文章

Spring MVC全局异常处理与拦截器校检

Spring MVC全局异常处理与拦截器校检

在使用Spring MVC进行开发时,总是要对系统异常和用户的异常行为进行处理,以提供给用户友好的提示,也可以提高系统的安全性。 拦截系统响应错误 首先是拦截系统响应错误,这...

ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常

ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常

在ASP.NET MVC中,通过应用程序生命周期中的Application_Error事件可以捕获到网站引发的所有未处理异常。本文作为学习笔记,记录了使用Global.asax文件的Ap...

python异常处理

1.什么是异常 程序出现了错误(在编译或者执行过程中) >>> aTraceback (most recent call last): File "<...

你有没有这样写异常处理代码呢?

经常看到同事这样写代码: DataSet QueryDB() { DataSet ds=null; try { //do something...

异常处理汇总-运维系列

异常处理汇总:http://www.cnblogs.com/dunitian/p/4599258.html 最新更新时间:2019.03.07 Li...

SpringMVC学习系列(10) 之 异常处理

SpringMVC学习系列(10) 之 异常处理

在项目中如何处理出现的异常,在每个可能出现异常的地方都写代码捕捉异常?这显然是不合理的,当项目越来越大是也是不可维护的。那么如何保证我们处理异常的代码精简且便于维护呢?这就是本篇要讲的内...

asp.net core添加全局异常处理及log4net、Nlog应用

asp.net core添加全局异常处理及log4net、Nlog应用

0、目录  整体架构目录:ASP.NET Core分布式项目实战-目录 一、介绍   此篇文章将会介绍项目的全局异常收集以及采...

Spring Boot异常处理

Spring Boot异常处理

一.默认映射 我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,...

.NET----错误和异常处理机制

.NET----错误和异常处理机制

前言   错误的出现并不总是编写程序的人的原因,有时应用程序会因为应用程序的最终用户引发的动作或运行代码的环境发生错误。无论如何,我们都应预测应用程序中出现的错误,并相应的进行编码...