基于C#实现任意格式JSON文本的HTTP交互抽象类
作者:老胖闲聊
引言
为了实现一个支持任意格式JSON交互的抽象类,并且在整个过程中不需要对JSON格式数据进行序列化和反序列化操作,可以使用C#中的HttpClient类来进行HTTP请求和响应。下面将创建一个抽象类JsonHttpClient,它封装了HTTP请求和响应的逻辑,并且允许直接处理JSON字符串。
1. 创建抽象类 JsonHttpClient
using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; public abstract class JsonHttpClient { // HttpClient实例,用于发送HTTP请求 private readonly HttpClient _httpClient; // 构造函数,初始化HttpClient protected JsonHttpClient() { _httpClient = new HttpClient(); } // 发送HTTP请求的抽象方法,子类必须实现 protected abstract Task<HttpResponseMessage> SendRequestAsync(HttpRequestMessage request); // 发送HTTP GET请求 public async Task<string> GetAsync(string uri) { // 创建HTTP GET请求 var request = new HttpRequestMessage(HttpMethod.Get, uri); // 发送请求并获取响应 var response = await SendRequestAsync(request); // 确保响应成功 response.EnsureSuccessStatusCode(); // 读取响应内容并返回 return await response.Content.ReadAsStringAsync(); } // 发送HTTP POST请求 public async Task<string> PostAsync(string uri, string jsonContent) { // 创建HTTP POST请求 var request = new HttpRequestMessage(HttpMethod.Post, uri) { Content = new StringContent(jsonContent, Encoding.UTF8, "application/json") }; // 发送请求并获取响应 var response = await SendRequestAsync(request); // 确保响应成功 response.EnsureSuccessStatusCode(); // 读取响应内容并返回 return await response.Content.ReadAsStringAsync(); } // 发送HTTP PUT请求 public async Task<string> PutAsync(string uri, string jsonContent) { // 创建HTTP PUT请求 var request = new HttpRequestMessage(HttpMethod.Put, uri) { Content = new StringContent(jsonContent, Encoding.UTF8, "application/json") }; // 发送请求并获取响应 var response = await SendRequestAsync(request); // 确保响应成功 response.EnsureSuccessStatusCode(); // 读取响应内容并返回 return await response.Content.ReadAsStringAsync(); } // 发送HTTP DELETE请求 public async Task<string> DeleteAsync(string uri) { // 创建HTTP DELETE请求 var request = new HttpRequestMessage(HttpMethod.Delete, uri); // 发送请求并获取响应 var response = await SendRequestAsync(request); // 确保响应成功 response.EnsureSuccessStatusCode(); // 读取响应内容并返回 return await response.Content.ReadAsStringAsync(); } }
2. 实现具体的HTTP客户端类
可以创建一个具体的HTTP客户端类,继承自JsonHttpClient
,并实现SendRequestAsync
方法。
public class MyHttpClient : JsonHttpClient { // 实现SendRequestAsync方法 protected override async Task<HttpResponseMessage> SendRequestAsync(HttpRequestMessage request) { // 使用HttpClient发送请求并返回响应 return await _httpClient.SendAsync(request); } }
3. 使用案例
下面是一个从发送HTTP请求到获取响应并显示在控制台的完整案例。
using System; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { // 创建MyHttpClient实例 var httpClient = new MyHttpClient(); // 定义API的URL string apiUrl = "https://jsonplaceholder.typicode.com/posts"; try { // 发送HTTP GET请求 string response = await httpClient.GetAsync(apiUrl); // 将响应内容显示在控制台 Console.WriteLine("Response from GET request:"); Console.WriteLine(response); // 发送HTTP POST请求 string postData = "{\"title\": \"foo\", \"body\": \"bar\", \"userId\": 1}"; string postResponse = await httpClient.PostAsync(apiUrl, postData); // 将响应内容显示在控制台 Console.WriteLine("Response from POST request:"); Console.WriteLine(postResponse); } catch (HttpRequestException e) { // 处理HTTP请求异常 Console.WriteLine("HTTP Request Error: " + e.Message); } catch (Exception e) { // 处理其他异常 Console.WriteLine("Error: " + e.Message); } } }
4. 代码注解
HttpClient:
HttpClient
是C#中用于发送HTTP请求和接收HTTP响应的类。它是线程安全的,建议在应用程序中重用同一个HttpClient
实例。HttpRequestMessage: 表示一个HTTP请求消息,包含请求方法(GET、POST等)、请求URI、请求头、请求内容等信息。
HttpResponseMessage: 表示一个HTTP响应消息,包含响应状态码、响应头、响应内容等信息。
StringContent: 用于将字符串内容作为HTTP请求的内容发送。我们可以指定内容的编码和媒体类型(如
application/json
)。EnsureSuccessStatusCode: 确保HTTP响应的状态码表示成功(2xx),否则抛出
HttpRequestException
异常。ReadAsStringAsync: 异步读取HTTP响应的内容并返回为字符串。
5. 运行结果
当运行这个程序时,它会发送一个GET请求和一个POST请求到https://jsonplaceholder.typicode.com/posts
,并将响应内容打印到控制台。GET请求会返回所有的帖子,而POST请求会创建一个新的帖子并返回创建的结果。
6. 总结
通过这个抽象类JsonHttpClient
,可以轻松地发送HTTP请求并处理响应,而不需要对JSON数据进行序列化和反序列化操作。这种方法适用于需要直接处理JSON字符串的场景,例如与某些API进行交互时。
以上就是基于C#实现任意格式JSON文本的HTTP交互抽象类的详细内容,更多关于C# JSON的HTTP交互抽象类的资料请关注脚本之家其它相关文章!