如何在ASP.NET Web Api服务中不引发异常?

科里·伯内特(Corey Burnett)

我正在构建ASP.NET Web Api服务,并且我想创建集中式异常处理代码。

我想以不同的方式处理不同类型的异常。我将使用log4net记录所有异常。对于某些类型的例外情况,我想通过电子邮件通知管理员。对于某些类型的异常,我想抛出一个友好的异常,该异常将返回给调用方。对于某些类型的异常,我只想继续从控制器进行处理。

但是我该怎么做呢?我正在使用异常过滤器属性。我有此代码的工作。该属性已正确注册,并且代码正在触发。我只想知道如果抛出某些类型的异常该如何继续。希望有道理。

public class MyExceptionHandlingAttribute : ExceptionFilterAttribute
{
  public override void OnException(HttpActionExecutedContext actionExecutedContext)
  {
    //Log all errors
    _log.Error(myException);

    if(myException is [one of the types I need to notify about])
    {
      ...send out notification email
    }

    if(myException is [one of the types that we continue processing])
    {
      ...don't do anything, return back to the caller and continue
      ...Not sure how to do this.  How do I basically not do anything here?
    }

    if(myException is [one of the types where we rethrow])
    {
      throw new HttpResponseException(new HttpResponseMessage(StatusCode.InternalServerError)
      {
        Content = new StringContent("Friendly message goes here."),
        ReasonPhrase = "Critical Exception"
      });
    }
  }
}
CodeCaster

对于某些类型的异常,我只想继续从控制器进行处理。但是我该怎么做呢?

通过编写try..catch您希望此行为发生的位置。请参见在引发并捕获异常后恢复代码执行

为了澄清,我假设您有这样的东西:

void ProcessEntries(entries)
{
    foreach (var entry in entries)
    {
        ProcessEntry(entry);
    }
}

void ProcessEntry(entry)
{
    if (foo)
    {
        throw new EntryProcessingException();
    }
}

并且当EntryProcessingException抛出该异常时,您实际上并不在意并希望继续执行。


如果这个假设是正确的:您将无法使用全局异常过滤器执行此操作,因为一旦捕获到异常,就不会将执行返回到引发该异常的位置。C#中没有On Error Resume Next,尤其是当@Marjan解释使用过滤器处理异常时,尤其如此

因此,EntryProcessingException从您的过滤器中删除,并通过更改循环主体来捕获该特定异常:

void ProcessEntries(entries)
{
    foreach (var entry in entries)
    {
        try
        {
            ProcessEntry(entry);
        }
        catch (EntryProcessingException ex)
        {
            // Log the exception
        }
    }
}

而且,您的循环会很乐意旋转到尽头,但会引发所有其他异常,这些异常将由您的过滤器处理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过Lambda表达式引发异常时如何在ASP.NET Web API中全局处理异常

来自分类Dev

如何在ASP.NET Web API中接收JSON?

来自分类Dev

如何在asp.net core 1.0 Web API的启动服务中创建后台任务?

来自分类Dev

如何在ASP.NET Web API上获取对象?

来自分类Dev

如何在ASP.net Web服务中访问Microsoft Outlook服务

来自分类Dev

ASP.NET(C#)Web服务中的异常处理

来自分类Dev

如何在ASP.Net中将Web服务层添加到Web应用程序

来自分类Dev

如何在ASP.NET Web服务中同步我的方法的某些部分?

来自分类Dev

如何在 ASP .Net (Aspx) 中创建可从 Javascript 访问的 Web 服务方法?

来自分类Dev

如何在经典 asp 中使用 asp.net web api?

来自分类Dev

我如何在 asp.net web api 项目而不是 .net core 上使用 DI

来自分类Dev

如何在VS.NET 2012中的ASP.NET Web表单中使用jQuery文件?

来自分类Dev

如何在ASP.NET Web API内存测试中添加客户端证书?

来自分类Dev

如何在Asp.net Web Api 2中使用多种Put和Post方法

来自分类Dev

如何在新的ASP.NET Core中调用Web API非默认构造函数

来自分类Dev

如何在ASP.NET Web API中获取依赖关系解析器的实例

来自分类Dev

如何在ASP.NET Web API中接受ISO日期格式

来自分类Dev

如何在此asp.NET Web API方法中检索Ajax标头?

来自分类Dev

如何在ASP.NET Core Web API中配置JSON格式缩进

来自分类Dev

如何在ASP.NET Web API中执行异步“解雇”操作

来自分类Dev

如何在ASP.NET Core Web Api中完成版本控制

来自分类Dev

如何在IIS中为OWIN配置ASP.NET Web API 2?

来自分类Dev

如何在ASP.Net 5 Web API中启用OData

来自分类Dev

如何在OData asp.net Web API中创建注册用户操作

来自分类Dev

如何在ASP.NET MVC4中为Web API网址创建通用方法

来自分类Dev

如何在ASP.NET Web API异步控制器方法中返回对象列表

来自分类Dev

如何在ASP.NET Web API 5.2.3中使用FromForm属性

来自分类Dev

如何在ASP.NET Framework Web API中返回自定义JSON对象?

来自分类Dev

如何在运行于ASP.NET Core 3.1的启用OData的Web API中添加Swagger

Related 相关文章

  1. 1

    通过Lambda表达式引发异常时如何在ASP.NET Web API中全局处理异常

  2. 2

    如何在ASP.NET Web API中接收JSON?

  3. 3

    如何在asp.net core 1.0 Web API的启动服务中创建后台任务?

  4. 4

    如何在ASP.NET Web API上获取对象?

  5. 5

    如何在ASP.net Web服务中访问Microsoft Outlook服务

  6. 6

    ASP.NET(C#)Web服务中的异常处理

  7. 7

    如何在ASP.Net中将Web服务层添加到Web应用程序

  8. 8

    如何在ASP.NET Web服务中同步我的方法的某些部分?

  9. 9

    如何在 ASP .Net (Aspx) 中创建可从 Javascript 访问的 Web 服务方法?

  10. 10

    如何在经典 asp 中使用 asp.net web api?

  11. 11

    我如何在 asp.net web api 项目而不是 .net core 上使用 DI

  12. 12

    如何在VS.NET 2012中的ASP.NET Web表单中使用jQuery文件?

  13. 13

    如何在ASP.NET Web API内存测试中添加客户端证书?

  14. 14

    如何在Asp.net Web Api 2中使用多种Put和Post方法

  15. 15

    如何在新的ASP.NET Core中调用Web API非默认构造函数

  16. 16

    如何在ASP.NET Web API中获取依赖关系解析器的实例

  17. 17

    如何在ASP.NET Web API中接受ISO日期格式

  18. 18

    如何在此asp.NET Web API方法中检索Ajax标头?

  19. 19

    如何在ASP.NET Core Web API中配置JSON格式缩进

  20. 20

    如何在ASP.NET Web API中执行异步“解雇”操作

  21. 21

    如何在ASP.NET Core Web Api中完成版本控制

  22. 22

    如何在IIS中为OWIN配置ASP.NET Web API 2?

  23. 23

    如何在ASP.Net 5 Web API中启用OData

  24. 24

    如何在OData asp.net Web API中创建注册用户操作

  25. 25

    如何在ASP.NET MVC4中为Web API网址创建通用方法

  26. 26

    如何在ASP.NET Web API异步控制器方法中返回对象列表

  27. 27

    如何在ASP.NET Web API 5.2.3中使用FromForm属性

  28. 28

    如何在ASP.NET Framework Web API中返回自定义JSON对象?

  29. 29

    如何在运行于ASP.NET Core 3.1的启用OData的Web API中添加Swagger

热门标签

归档