zoukankan      html  css  js  c++  java
  • Mvc2.0 处理自定义错误.

    遇到很奇怪的问题:

    新建Mvc2.0项目,添加新的Area,在 Area里的 Web.config 配置  <customErrors  mode="On"/> , 在Area里的Controller 加上 ErrorHandle , 在Shared里添加 Error.aspx.

    Action 抛一个错.

    显示正确的 Error.aspx 里的信息,没问题.

    在真实项目中, 不能通过. 显示 运行时错误,需要配置 customErrors .

    到现在依然没有找到真正的原因.

    现只记录解决的结果(在此感谢 TomXu 的大力帮助 ):

    public class MyError : HandleErrorAttribute
        {
            public override void OnException(ExceptionContext filterContext)
            {
                filterContext.ExceptionHandled = true;
                filterContext.HttpContext.Response.StatusCode = 500;
    
                ProcException(filterContext, filterContext.Exception);
            }
    
            public static void ProcException(ControllerContext filterContext, Exception exp)
            {
                #region errorHtml
                string ErrorHtml = @"error";
                #endregion
                ErrorHtml = ErrorHtml.Replace("~/", MyUrl.GetUrlHeader())
                    .Replace("$ErrorMsg$", exp != null ? exp.Message : "");
                //base.OnException(filterContext);
                filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
    
                filterContext.HttpContext.Response.Clear();
                filterContext.HttpContext.Response.Write(ErrorHtml);
                filterContext.HttpContext.Response.Flush();
                filterContext.HttpContext.Response.End();
            }
        }
        [MyError]
        public class MyHostController : MyMvcController
        {
            protected override IActionInvoker CreateActionInvoker()
            {
                return new MyHostActionInvoker();
            }
            protected override void HandleUnknownAction(string actionName)
            {
                try
                {
                    base.HandleUnknownAction(actionName);
                }
                catch (Exception e)
                {
                    this.ControllerContext.HttpContext.Response.StatusCode = 404;
                    MyError.ProcException(this.ControllerContext, e);
                }
            }
        }
    

      

    发现有两个 Exception 的地方, 一个是 ExceptionContext.Exception ,另一个是 HttpContext.Current.Error,而两个Exception 没有多大关系。

    个人初步判断: 如果 HttpContext.Current.Error 里有错误,则会抛到 IIS 来处理。而Mvc的错误处理机制是 Exception 保存在了 ExceptionContext 中,绕开了HttpContext.Current.Error 。 

    待日后验证。

    alarm   作者:NewSea     出处:http://newsea.cnblogs.com/    QQ,MSN:iamnewsea@hotmail.com

      如无特别标记说明,均为NewSea原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。
  • 相关阅读:
    AdaBoost
    svm算法
    DBSCAN算法
    聚类算法分类
    EM算法
    ios开发中使用FMDB
    eclipse配置mahout
    【MyBatis】Mapper XML 文件
    MyBatis Generator的使用
    IntelliJ IDEA 创建 Maven简单项目
  • 原文地址:https://www.cnblogs.com/newsea/p/2294865.html
Copyright © 2011-2022 走看看