.NET怎么调用一个RESTful API并处理返回的JSON

来源:IT编程作者:大卫头衔:程序员
导读:本期聚焦于小伙伴创作的《.NET怎么调用一个RESTful API并处理返回的JSON》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《.NET怎么调用一个RESTful API并处理返回的JSON》有用,将其分享出去将是对创作者最好的鼓励。

在.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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。