【问题标题】:Flurl exception not being caughtFlurl 异常没有被捕获
【发布时间】:2016-10-10 10:32:47
【问题描述】:

我不明白为什么,但我收到了 Flurl 异常,并且这些异常没有被 try/catch 块捕获。关于为什么会发生这种情况的任何想法?

代码如下:

try
{
    var x = await Utils.Sales.GetUrl()
        .PostJsonAsync(new Sale
        {
            MerchantId = Constants.Sandbox.MerchantId
        })
        .ReceiveJson<Sale>();
    var b = x;
}
catch (FlurlHttpTimeoutException)
{
    //LogError("Timed out!"); //todo: 
}
catch (FlurlHttpException ex)
{
    var x = ex.Message;
    //todo: 
    //if (ex.Call.Response != null)
    //    LogError("Failed with response code " + call.Response.StatusCode);
    //else
    //    LogError("Totally failed before getting a response! " + ex.Message);
}
catch (Exception ex)
{
    var a = ex.Message;
}

这是输出(我知道抛出异常的唯一原因):

【问题讨论】:

  • 可能是被库或者你调用的方法捕获了?
  • @MehrzadChehraz 很抱歉,但我无法理解...您是在暗示我在某处有另一个 try/catch 还是其他库正在处理异常?
  • @eestein 库可能正在抛出异常、捕获并处理它。输出日志显示抛出的异常(包括已捕获的异常)
  • @Rob 我明白了。但是库本身提供了异常处理选项,并且在创建者的页面上,他使用相同的代码作为示例。考虑到这一点,我认为情况并非如此。
  • 除了你之外还有其他人在做这个项目吗?我能想到的是有人可能有configured a global error handler 调用call.ExceptionHandled = true,这将防止异常冒泡到您的代码。

标签: c# flurl


【解决方案1】:

也许这个页面会帮助https://msdn.microsoft.com/zh-cn/library/jj619227.aspx
抱歉没有英文版,你可以试试谷歌翻译。
您捕获异常类型或等待代码有问题。
尝试以这种方式捕获您的异常: ```

try
{
    await t1;
}
catch (AggregateException ex)
{
    var innerEx = ex.InnerExceptions[0];
    if (innerEx is NotSupportedException)
    {
        ...
    }
    else if (innerEx is NotImplementedException)
    {
        ...
    }
    else
    {
        ...
    }
}

```

【讨论】:

  • 我不明白那里写了什么,但我明白代码。我认为这与我正在做的事情相同,不是吗?
  • 和你的一样的代码是错误的catch例子,下面是catch异常的正确方法,并在本文中展示了一些其他方法处理await的异常。还有一些解释这些设计。我只是快速阅读一些摘要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2013-08-08
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多