在.NET应用开发中,调用第三方或内部系统的RESTful API并解析返回的JSON数据是非常常见的场景,无论是桌面应用、Web应用还是服务端程序,都需要掌握这套标准操作流程。
准备工作
首先需要明确接口的基本信息,包括请求地址、请求方法(GET、POST等)、需要传递的参数以及返回JSON的结构。如果是GET请求,参数通常拼接在URL后面;如果是POST请求,参数一般放在请求体中。同时需要定义和返回JSON结构对应的C#实体类,方便后续反序列化操作。
定义实体类
假设我们要调用的API返回的JSON结构如下:
{
"code": 200,
"message": "请求成功",
"data": {
"id": 1,
"name": "测试数据",
"createTime": "2024-01-01T00:00:00"
}
}
对应的C#实体类可以定义为:
public class ApiResult<T>
{
public int Code { get; set; }
public string Message { get; set; }
public T Data { get; set; }
}
public class DataInfo
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreateTime { get; set; }
}
使用HttpClient发起请求
HttpClient是.NET中用于发送HTTP请求的核心类,建议使用单例模式或者依赖注入的方式使用,避免频繁创建和销毁实例导致端口耗尽问题。
GET请求示例
发起GET请求并解析返回JSON的代码如下:
using System;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
public class ApiCaller
{
private readonly HttpClient _httpClient;
public ApiCaller(HttpClient httpClient)
{
_httpClient = httpClient;
// 设置默认的请求头,比如接受JSON格式返回
_httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
}
public async Task<ApiResult<DataInfo>> GetDataAsync(string url)
{
try
{
// 发起GET请求
HttpResponseMessage response = await _httpClient.GetAsync(url);
// 确保请求成功
response.EnsureSuccessStatusCode();
// 读取响应内容
string jsonResponse = await response.Content.ReadAsStringAsync();
// 反序列化JSON到实体类
ApiResult<DataInfo> result = JsonSerializer.Deserialize<ApiResult<DataInfo>>(jsonResponse, new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true // 忽略属性名大小写
});
return result;
}
catch (HttpRequestException ex)
{
// 处理请求异常
Console.WriteLine($"请求发生异常:{ex.Message}");
return null;
}
}
}
POST请求示例
如果是需要传递参数的POST请求,代码示例如下:
using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
public class ApiCaller
{
private readonly HttpClient _httpClient;
public ApiCaller(HttpClient httpClient)
{
_httpClient = httpClient;
_httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
}
public async Task<ApiResult<DataInfo>> PostDataAsync(string url, object postData)
{
try
{
// 序列化请求参数为JSON字符串
string jsonPostData = JsonSerializer.Serialize(postData);
// 创建请求内容,设置内容类型为application/json
StringContent content = new StringContent(jsonPostData, Encoding.UTF8, "application/json");
// 发起POST请求
HttpResponseMessage response = await _httpClient.PostAsync(url, content);
response.EnsureSuccessStatusCode();
string jsonResponse = await response.Content.ReadAsStringAsync();
ApiResult<DataInfo> result = JsonSerializer.Deserialize<ApiResult<DataInfo>>(jsonResponse, new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
});
return result;
}
catch (HttpRequestException ex)
{
Console.WriteLine($"请求发生异常:{ex.Message}");
return null;
}
}
}
注意事项
- HttpClient不要每次请求都创建新实例,推荐在依赖注入容器中注册为单例,或者使用IHttpClientFactory管理生命周期。
- JSON反序列化时如果属性名和JSON字段名不一致,可以使用
JsonPropertyName特性指定映射关系。 - 实际开发中需要根据接口要求设置对应的请求头,比如认证令牌可以放在Authorization头中。
- 对于大文件或者复杂请求,需要合理设置请求超时时间,避免程序长时间阻塞。
总结
在.NET中调用RESTful API并处理JSON数据的核心流程是:定义实体类、使用HttpClient发起对应方法的请求、读取响应内容、反序列化JSON到实体类。只要掌握这几个核心步骤,结合异常处理和实际需求调整参数,就能完成绝大多数接口对接场景的开发工作。
.NETRESTful_APIJSONHttpClient修改时间:2026-06-22 11:18:36