zoukankan      html  css  js  c++  java
  • ABP官方文档翻译 6.1.3 异常处理

    处理异常

    • 介绍
    • 启用错误处理
    • Non-Ajax请求
      • 显示异常
      • UserFriendlyException
      • Error模型
    • AJAX请求
    • 异常事件

    介绍

      此文档是与ASP.NET MVC和Web API相关的。如果你对ASP.NET Core感兴趣,参见ASP.NET Core文档。

      在web应用中,异常通常在MVC Controller actions和Web API Controller actions中处理。当异常发生时,应用程序的用户以某种方式被告知错误的相关信息及原因。

      如果错误在正常的HTTP请求时发生,将会显示一个异常页。如果在AJAX请求中发生错误,服务器发送错误信息到客户端,然后客户端处理错误并显示给用户。

      在所有的Web请求中处理异常是件乏味且重复的工作。ABP自动化完成异常处理,几乎从不需要显示的处理任何异常。ABP处理所有的异常、记录异常并返回合适、格式化的响应到客户端。在客户端处理这些响应并将错误信息显示给用户。

    启用错误处理

      要启用ASP.NET MVC控制器的错误处理 ,ASP.NET MVC 引用必须启用customErrors模型。

    <customErrors mode="On" />

      如果你不想在本地计算机处理错误,可以把它设置为'RemoteOnly'。注意,只有ASP.NET MVC控制器需要这样设置,Web API控制器并不需要。

      如果你已经在全局过滤器处理了异常,那么它可能会隐藏异常,ABP的异常处理就可能不会如期望的那样工作。所以,如果需谨慎设置全局异常处理过滤器。

    Non-Ajax请求

      如果请求不是AJAX的,将会显示一个错误页。

    显示异常

      这里,有一个MVC控制器的action,它抛出了一个随意的异常:

    public ActionResult Index()
    {
        throw new Exception("A sample exception message...");
    }

      当然,这个异常可能由另一个方法抛出,而这个方法的调用在这个action里。ABP处理这个异常、记录它并显示'Error.cshtml'视图。你可以自定义这个视图来显示错误。一个示例错误视图(在ABP模板中的默认错误视图):

      ABP对用户隐藏了异常的细节并显示了一个标准(本地化的)的错误信息,除非你显示的抛出一个UserFriendlyException

    UserFriendlyException

      UserFriendlyException是一个特殊类型的异常,它直接显示给用户。参见下面的示例:

    public ActionResult Index()
    {
        throw new UserFriendlyException("Ooppps! There is a problem!", "You are trying to see a product that is deleted...");
    }

      ABP记录它但这次不隐藏异常:

      

    所以,如果你想显示一个特定的错误信息给用户,那就抛出一个UserFriedlyException(或者一个继承自这个类的异常)。

    Error模型

      ABP传递一个ErrorViewModel对象作为Error视图的model:

    public class ErrorViewModel
    {
        public AbpErrorInfo ErrorInfo { get; set; }
    
        public Exception Exception { get; set; }
    }

      ErrorInfo包含可以显示给用户错误的详细信息。Exception对象即为抛出的异常。如果你想的话,可以检查它并显示额外信息。例如,如果它是一个AbpValidationException,我们可以显示校验错误:

    AJAX请求

      如果MVC action的返回类型时JsonResult(或异步actions为Task<JsonResult>),ABP返回给客户一个基于异常JSON对象。一个错误返回对象的示例:

    {
      "targetUrl": null,
      "result": null,
      "success": false,
      "error": {
        "message": "An internal error occured during your request!",
        "details": "..."
      },
      "unAuthorizedRequest": false
    }

      success:false表明有错误。error对象提供了错误信息和详情。

      当你在客户端使用ABP基础设施来进行AJAX请求,它自动使用message API处理JSON对象并显示错误信息给用户。参见AJAX API了解更多信息。

    异常事件

      当ABP处理任何异常时,它会触发AbpHandledExceptionData事件,这个事件可以被注册并被通知(参见eventbus文档了解更多关于Event Bus的信息)。示例:

    public class MyExceptionHandler : IEventHandler<AbpHandledExceptionData>, ITransientDependency
    {
        public void HandleEvent(AbpHandledExceptionData eventData)
        {
            //TODO: Check eventData.Exception!
        }
    }

      如果你把这个示例类放到你的应用中(通常放到Web工程),HandleEvent方法会在所有异常发生时被ABP调用。所以,你可以好好的研究并处理这个异常。

    返回主目录

  • 相关阅读:
    链接数据库
    Ajax 密码验证
    for循环 打印菱形 空 和 实
    for 循环 正方形
    面向对象
    用正则表达式 匹配手机号码
    正则表达式
    js 中 == 和=== 有什么区别?
    js 删除
    封装函数增删改查
  • 原文地址:https://www.cnblogs.com/xajh/p/7062017.html
Copyright © 2011-2022 走看看