【问题标题】:MVC Custom error and exception handling - standard through out the projectMVC 自定义错误和异常处理 - 贯穿整个项目的标准
【发布时间】:2026-01-20 11:25:01
【问题描述】:

我是 ASP.NET MVC、Kendo UI (razor)、Jquery 的新手。我有一个会引发 3 种错误的应用程序

  1. 未处理的异常(400、403,500 503 等)- 抛出一般异常
  2. 预期的异常/错误(自定义异常) - 例如尝试创建系统中已存在的联系人 - 系统需要抛出“Contact_duplicated_exception”并向用户显示“之前已创建联系人。此操作无法继续”。
  3. 模型状态错误 (UI)。我使用 @Html.ValidationSummary(true) 添加到 modelstate 以显示在页面上的错误

在整个应用程序中处理上述问题的最佳标准方法是什么? 我需要使用 Jquery Ajax [POST] 将这些消息发送回给用户。

我使用了以下概念,但我需要实现处理上述问题的标准方法 1.我用过ELMAH(用于未处理的异常) 2. global.asax.cs 中的 Application_Error(object sender, EventArgs e) 3.自定义HandleErrorArrtibute 公共类 HandleErrorWithAjaxFilter : HandleErrorAttribute, IExceptionFilter

谢谢!

【问题讨论】:

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


    【解决方案1】:

    对于 #1 和 #3,您看起来不错,恕我直言。但是,我认为您的弱点是 #2,原因如下:

    1. 如果预期异常,则不应允许它落入 Application_Error;因为,嗯...这是意料之中的工作流程,而不是例外。
    2. 因此,作为对用户输入的反应和工作流程的一部分,它应该作为 #3 的一部分进行处理。

    因此,在您的情况下,我将在查找重复项的特定实例中进行,将验证属性添加到可能重复的类中,如下所示:

    [AttributeUsage(AttributeTargets.Class)]
    public class UniqueContactAttribute : ValidationAttribute
    {
        public override bool IsValid(object value)
        {
            bool isValid = true;
            Contact contact = value as Contact;
            if(contact != null)
            {
                // check for your duplicate in the database and set isValid to false if you find one.
            }
            return isValid;
        }
    }
    

    元数据类的用途:

    [UniqueContact(ErrorMessage = "Contact was previously created. This action could not proceed.")]
    public class Contact_Validation
    {
    
    }
    

    【讨论】: