【问题标题】:What are some of the strategy to handle unhandled exception in asp.net mvc applications?在 asp.net mvc 应用程序中处理未处理异常的一些策略是什么?
【发布时间】:2009-02-01 05:32:42
【问题描述】:

我想知道您在处理 ASP.NET MVC 中未处理的异常时所采用的一些策略/实践。

简而言之,我希望在发生任何错误时避免出现黄屏,并向访问者显示错误一致的错误消息。

我的意思是你是为此编写一个控制器来显示适当的错误页面,或者你采用其他方式,例如编写一个 httpmodule 并在全局级别捕获错误。

对此方向的任何意见表示赞赏。

【问题讨论】:

    标签: asp.net asp.net-mvc exception-handling


    【解决方案1】:

    使用 HandleError 属性是可行的方法。这是我用来处理来自 JQuery、ExtJs 等的 Ajax 调用的一个小示例。

    在你的控制器上

    public class DataController : Controller
    {    
        [HandleError(ExceptionType = typeof(ArgumentException), View = "ErrorAjax")]
        public void Foo(string x, string y)
        {    
            if (String.IsNullorEmpty(x))
                throw new ArgumentException("String cannot be empty!");
    
                // Call your layers or whatever here
                AnotherCall();
        }
    }
    

    然后在您看来 (ErrorAjax)。注意它是强类型(HandleErrorInfo)

    <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<HandleErrorInfo>" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Sorry Dude!</title>
    </head>
    <body>
        <div>
            <!-- be creative here-->
            Sorry, an error occurred while processing your request.
            Action = <%= ViewData.Model.ActionName %>
            Controller = <%= ViewData.Model.ControllerName %>
            Message = <%= ViewData.Model.Exception.Message %>
    
        </div>
    </body>
    </html>
    

    几个问题

    1. 检查您的 web.config 并确保 customErrors mode="On"
    2. 对于初学者,在共享文件夹下创建视图

    【讨论】:

    • 3.还要确保您的错误页面不返回任何错误。因为必须使用 HandlerErrorInfo 作为其模型 - 如上所示,但当然还有其他可能的错误来源。
    • 另一个小提示:确保对您的消息进行 HtmlEncode,或者如果您使用的是 .net 4(在回答时不可用),请使用
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      不要使用您链接到的异常处理文章。这是一篇旧文章,他们没有在框架中添加 HandleError 属性。使用HandleError attribute。它是在预览版 4 中添加的。

      【讨论】:

      • 我会检查这个。感谢您的意见。
      猜你喜欢
      • 1970-01-01
      • 2012-02-16
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      相关资源
      最近更新 更多