gpt4 book ai didi

asp.net-mvc - 它是 ASP.NET MVC 中异常处理的正确方法吗

转载 作者:行者123 更新时间:2023-12-04 18:13:16 24 4
gpt4 key购买 nike

我已阅读有关 ASP.NET MVC 中的异常处理的文章。我想通过简要介绍它来确保我做对了。任何人都可以发表评论。

  • 如有必要,在 Controller 操作中捕获异常。
    [HttpPost]
    public ActionResult Insert()
    {
    try
    {

    }
    catch
    {
    //ModelState.Error -> display error msg to the user.
    }
    }
  • 覆盖 basecontroller 中 Controller 的“OnException”方法并“记录”步骤 1 中引发的异常和其他 MVC 异常
  • 在 application_onerror 中记录全局异常。
  • 最佳答案

    我肯定会推荐 ELMaH,而不是自己编写此代码,也可以通过 Log4Net 为您的 MVC 应用程序编写代码。我个人避免任何异常处理,除非我对它有特定的功能响应。通过这种方式,我不会“吃掉”任何应用程序范围的工具(如 ELMaH)将为我优雅地处理的错误。

    ELMaH 还具有很好的内置网络报告,并且有专门为 ELMaH 提供的第三方工具可以为您提供统计数据,例如最常见的错误。

    您可以从自定义错误重定向开始...

    <customErrors defaultRedirect="~/site/error" mode="RemoteOnly">
    <error statusCode="404" redirect="~/site/notfound" />
    </customErrors>

    ...对于知道您正在使用 ELMaH 的 Controller ...
    public virtual ActionResult Error() {
    System.Collections.IList errorList = new System.Collections.ArrayList();
    ErrorLog.GetDefault(System.Web.HttpContext.Current).GetErrors(0, 1, errorList);
    ErrorLogEntry entry = null;
    if (errorList.Count > 0) {
    entry = errorList[0] as Elmah.ErrorLogEntry;
    }
    return View(entry);
    }

    ...由帮助访问者向您获取特定错误 ID 的 View 提供支持:
    @model Elmah.ErrorLogEntry

    @if (Context.User.Identity.IsAuthenticated) {
    <p>Since you are signed in, we've noted your contact information,
    and may follow up regarding this to help improve our product.</p>
    } else {
    <p>Since you aren't signed in, we won't contact you regarding this.</p>
    }
    <p>Error ID: @Model.Id</p>

    我还注意到在这个例子中这是一个 HttpPost。如果您正在使用 AJAX,那么您将希望以独特的方式处理错误。选择一个标准响应,您可以将其发送到所有 AJAX 代码都能正常处理的浏览器。也许通过在 javascript 警报中显示 ELMaH 错误 ID(作为一个简单的示例)。

    我还通过 Global.asax 处理了一些特殊类型的 AJAX 错误:
    protected void Application_EndRequest()
    {
    if (Context.Response.StatusCode == 302 &&
    Context.Request.Headers["X-Requested-With"] == "XMLHttpRequest")

    HandleErrorAttribute 是一个不错的功能,但众所周知,将它与 ELMaH 结合使用需要额外的工作。 How to get ELMAH to work with ASP.NET MVC [HandleError] attribute?

    关于asp.net-mvc - 它是 ASP.NET MVC 中异常处理的正确方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12208715/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com