【问题标题】:Problems catching exception from http flurl client从 http flurl 客户端捕获异常的问题
【发布时间】:2020-11-21 23:58:36
【问题描述】:

我有一个 .net5 的 rest api,它有一个全局异常过滤器,并在出现异常时返回一个 ErrorMessage 对象。 我从 WinForms .net 框架 4.8 应用程序调用 api,从服务器调用 badrequests,从客户端我得到一个 System.AggregateException 异常,根据 flurl 文档,它应该是 FlurlHttpException。 我尝试使用 HttpClient 进行调用,一切正常,但我发现使用 flurl 更容易,所以我想找到解决问题的方法,如果有人知道如何做到这一点并想要分享它会是很棒

        try
        {
            var result = (serverUrl)
                         .AppendPathSegment(endPoit)
                         .PostJsonAsync(new { Email = email, Password = password }).Result;
            if (result.ResponseMessage.IsSuccessStatusCode)
            {
                var aut = result.GetJsonAsync<Autorizacion>().Result;
            }
        }
        catch (FlurlHttpException ex)
        {
            var error = ex.GetResponseJsonAsync<ErrorMessage>();
        }

【问题讨论】:

    标签: winforms asp.net-core flurl


    【解决方案1】:

    首先,更喜欢使用async await 而不是阻止Result 调用。但是,如果您必须使用阻塞调用,请使用 GetAwaiter().GetResult() 来获取未包装的异常。

    【讨论】:

    • 感谢您的回答,您的回答解决了我的问题。我是异步调用世界的新手,在这种情况下我不能使用异步等待,而是使用 GetAwaiter()。 GetResult() 效果很好原来是我的一个概念错误,如果我等待 task.resul 的结果,我永远不会得到一个 flurl 异常。巨大的拥抱,再次感谢你
    • "在这种情况下我不能使用异步等待" 为什么不呢? Flurl 是一个仅限异步的库。以你现在的方式使用它会导致死锁,我建议要么切换到异步编程模型,要么使用明确支持阻塞 HTTP 调用的库。
    • 有人说我不能使用 async 和 await 因为我必须进行一些更改,但我最终这样做了,现在我使用所有异步......大拥抱
    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多