HttpClient.GetFromJsonAsync()
是 ASP.NET Core 中用于从 Web API 获取并反序列化 JSON 数据的方法。这个方法内部会执行一个 HTTP GET 请求,并在请求失败时抛出 HttpRequestException
异常。异常中包含了响应的状态码(HttpStatusCode
),你可以利用这一点来处理特定的 HTTP 状态码。
以下是如何处理基于 HttpStatusCode
的 HttpRequestException
的示例:
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
属性,并针对不同的状态码执行不同的处理逻辑。
如果你想要处理的不仅仅是 NotFound
和 BadRequest
,你可以继续添加更多的 catch
块来处理其他的状态码。
请注意,HttpClient
应该被设计为线程安全的并且是长期存在的,而不是每次请求都创建一个新的实例。在上面的示例中,HttpClient
实例是作为静态成员存在的。
如果你在使用 HttpClient.GetFromJsonAsync()
时遇到了具体的问题,比如状态码没有被正确捕获或者异常没有被抛出,请确保你的服务端返回的状态码是正确的,并且客户端的网络配置允许接收这些状态码。如果问题依然存在,可能需要进一步检查你的网络环境或者服务端的实现。
领取专属 10元无门槛券
手把手带您无忧上云