使用 http 客户端处理异常 - c# [关闭]
Posted
技术标签:
【中文标题】使用 http 客户端处理异常 - c# [关闭]【英文标题】:exception handling with http client - c# [closed] 【发布时间】:2021-12-19 05:55:49 【问题描述】:我有以下代码。这已经存在。 catch
的每个块到底在做什么。这是在 ASP.NET Web API 上处理异常的正确方法吗?如果不是,我该如何正确处理异常。
注意:第二个 catch
块中的 CustomServiceException
只是扩展了 Exception 类。
try
... I am calling my exteral API here using HttpClient class
catch(HttpRequestException ex)
Logger.Error("my error message", ex.Message);
catch(CustomServiceException)
throw;
catch (Exception ex)
Logger.Error("my error message",ex);
【问题讨论】:
【参考方案1】:嗯,它的作用是:
当抛出异常时,它会检查异常是HttpRequestException
还是派生类型。如果这是真的,那么它会记录错误消息并忽略其余的 catch
块。
当异常不是HttpRequestException
或派生类型时,它检查它是否是CustomServiceException
或派生类型。如果这是真的,那么它会重新抛出异常(注意这里使用了throw
,它保留了原始异常数据)。
当异常不是 HttpRequestException
或 CustomServiceException
(或任何派生类型)时,我们有这个“全局”catch 块,它将捕获任何异常、记录错误消息并继续工作。
【讨论】:
【参考方案2】:您的代码在概念上是这样做的:
try
//... I am calling my exteral API here using HttpClient class
catch (HttpRequestException ex)
Logger.Error("my error message", ex.Message);
catch (Exception ex) when (ex is not CustomServiceException)
Logger.Error("my error message", ex);
【讨论】:
以上是关于使用 http 客户端处理异常 - c# [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
C# socket编程时 如何实现server端关闭了能提示Client端
HTTP客户端NoCache标志导致空引用异常C# [重复]
C# 网络连接中异常断线的处理:ReceiveTimeout, SendTimeout 及 KeepAliveValues(设置心跳)