首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用HttpClient.GetFromJsonAsync(),如何在没有额外SendAsync调用的情况下处理基于HttpStatusCode的HttpRequestException?

HttpClient.GetFromJsonAsync() 是 ASP.NET Core 中用于从 Web API 获取并反序列化 JSON 数据的方法。这个方法内部会执行一个 HTTP GET 请求,并在请求失败时抛出 HttpRequestException 异常。异常中包含了响应的状态码(HttpStatusCode),你可以利用这一点来处理特定的 HTTP 状态码。

以下是如何处理基于 HttpStatusCodeHttpRequestException 的示例:

代码语言:txt
复制
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;

public class Program
{
    private static readonly HttpClient client = new HttpClient();

    public static async Task Main(string[] args)
    {
        try
        {
            var result = await client.GetFromJsonAsync<MyResponse>("https://api.example.com/data");
            // 处理正常结果
        }
        catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.NotFound)
        {
            // 处理 404 Not Found 的情况
            Console.WriteLine("资源未找到: " + ex.Message);
        }
        catch (HttpRequestException ex) when (ex.StatusCode == HttpStatusCode.BadRequest)
        {
            // 处理 400 Bad Request 的情况
            Console.WriteLine("错误的请求: " + ex.Message);
        }
        catch (HttpRequestException ex)
        {
            // 处理其他 HttpRequestException
            Console.WriteLine("请求异常: " + ex.Message);
        }
        catch (Exception ex)
        {
            // 处理其他所有异常
            Console.WriteLine("发生异常: " + ex.Message);
        }
    }
}

public class MyResponse
{
    // 定义你的响应数据结构
}

在这个示例中,我们使用了 C# 的异常处理机制 try-catch 来捕获可能发生的 HttpRequestException。通过 when 关键字,我们可以检查异常中的 StatusCode 属性,并针对不同的状态码执行不同的处理逻辑。

如果你想要处理的不仅仅是 NotFoundBadRequest,你可以继续添加更多的 catch 块来处理其他的状态码。

请注意,HttpClient 应该被设计为线程安全的并且是长期存在的,而不是每次请求都创建一个新的实例。在上面的示例中,HttpClient 实例是作为静态成员存在的。

如果你在使用 HttpClient.GetFromJsonAsync() 时遇到了具体的问题,比如状态码没有被正确捕获或者异常没有被抛出,请确保你的服务端返回的状态码是正确的,并且客户端的网络配置允许接收这些状态码。如果问题依然存在,可能需要进一步检查你的网络环境或者服务端的实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

9分20秒

查询+缓存 —— 用 Elasticsearch 极速提升您的 RAG 应用性能

1分30秒

基于强化学习协助机器人系统在多个操纵器之间负载均衡。

领券