.net HTTP请求类封装

简介: `HttpRequestHelper` 是一个用于简化 HTTP 请求的辅助类,支持发送 GET 和 POST 请求。它使用 `HttpClient` 发起请求,并通过 `Newtonsoft.Json` 处理 JSON 数据。示例展示了如何使用该类发送请求并处理响应。注意事项包括:简单的错误处理、需安装 `Newtonsoft.Json` 依赖,以及建议重用 `HttpClient` 实例以优化性能。

HttpRequestHelper

using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json; // 需要安装 Newtonsoft.Json NuGet 包

public class HttpRequestHelper
{
    private readonly HttpClient _httpClient;
    private readonly string _baseUrl;

    public HttpRequestHelper(string baseUrl)
    {
        _httpClient = new HttpClient();
        _baseUrl = baseUrl;
    }

    public async Task<T> GetAsync<T>(string endpoint)
    {
        try
        {
            var url = $"{_baseUrl}{endpoint}";
            var response = await _httpClient.GetAsync(url);
            response.EnsureSuccessStatusCode();
            var content = await response.Content.ReadAsStringAsync();
            return JsonConvert.DeserializeObject<T>(content);
        }
        catch (HttpRequestException ex)
        {
            Console.WriteLine($"Request error: {ex.Message}");
            throw;
        }
    }

    public async Task<T> PostAsync<T, TRequestBody>(string endpoint, TRequestBody body)
    {
        try
        {
            var url = $"{_baseUrl}{endpoint}";
            var content = new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json");
            var response = await _httpClient.PostAsync(url, content);
            response.EnsureSuccessStatusCode();
            var responseContent = await response.Content.ReadAsStringAsync();
            return JsonConvert.DeserializeObject<T>(responseContent);
        }
        catch (HttpRequestException ex)
        {
            Console.WriteLine($"Request error: {ex.Message}");
            throw;
        }
    }
}

以下是如何使用 HttpRequestHelper 类来发送 GET 和 POST 请求的示例

using System;
using System.Threading.Tasks;

public class Example
{
    public static async Task Main(string[] args)
    {
        var helper = new HttpRequestHelper("https://api.example.com");

        // 发送 GET 请求
        var getResponse = await helper.GetAsync<GetResponse>("endpoint/get");
        Console.WriteLine($"GET response: {JsonConvert.SerializeObject(getResponse, Formatting.Indented)}");

        // 发送 POST 请求
        var postRequestBody = new PostRequestBody
        {
            Property1 = "Value1",
            Property2 = 123
        };
        var postResponse = await helper.PostAsync<PostResponse, PostRequestBody>("endpoint/post", postRequestBody);
        Console.WriteLine($"POST response: {JsonConvert.SerializeObject(postResponse, Formatting.Indented)}");
    }

    public class GetResponse
    {
        // 根据你的 API 响应定义属性
        public string Property1 { get; set; }
        public int Property2 { get; set; }
    }

    public class PostRequestBody
    {
        // 根据你的 API 请求体定义属性
        public string Property1 { get; set; }
        public int Property2 { get; set; }
    }

    public class PostResponse
    {
        // 根据你的 API 响应定义属性
        public string Message { get; set; }
        public bool Success { get; set; }
    }
}

注意事项

  1. 错误处理:示例中的错误处理相对简单,仅输出错误信息并抛出异常。在实际应用中,你可能需要更复杂的错误处理逻辑。
  2. 依赖项:示例使用了 Newtonsoft.Json 库来序列化和反序列化 JSON。你需要通过 NuGet 包管理器安装 Newtonsoft.Json
  3. HttpClient 生命周期HttpClient 是一个资源密集型对象,建议重用 HttpClient 实例而不是每次请求都创建一个新的实例。
目录
相关文章
|
7月前
|
域名解析 缓存 Linux
如何让你的.NET WebAPI程序支持HTTP3?
如何让你的.NET WebAPI程序支持HTTP3?
105 2
如何让你的.NET WebAPI程序支持HTTP3?
|
4月前
|
数据采集 API 开发者
.NET 8新特性:使用ConfigurePrimaryHttpMessageHandler定制HTTP请求
在.NET 8中,通过`ConfigurePrimaryHttpMessageHandler`方法,开发者能更精细地控制HTTP请求,这对于构建高效爬虫尤为重要。此特性支持定制代理IP、管理Cookie与User-Agent,结合多线程技术,有效应对网络限制及提高数据采集效率。示例代码展示了如何设置代理服务器、模拟用户行为及并发请求,从而在遵守网站规则的同时,实现快速稳定的数据抓取。
.NET 8新特性:使用ConfigurePrimaryHttpMessageHandler定制HTTP请求
|
7月前
|
JSON 编解码 Go
Golang深入浅出之-HTTP客户端编程:使用net/http包发起请求
【4月更文挑战第25天】Go语言`net/http`包提供HTTP客户端和服务器功能,简化高性能网络应用开发。本文探讨如何发起HTTP请求,常见问题及解决策略。示例展示GET和POST请求的实现。注意响应体关闭、错误处理、内容类型设置、超时管理和并发控制。最佳实践包括重用`http.Client`,使用`context.Context`,处理JSON以及记录错误日志。通过实践这些技巧,提升HTTP编程技能。
85 1
|
7月前
|
JSON API 定位技术
.NET集成DeveloperSharp实现http网络请求&与其它工具的比较
该内容介绍了一个支持.NET Core 2.0及以上和.NET Framework 4.0及以上的HTTP请求调用方法,主要讨论了POST和GET两种形式。POST请求较为常见,涉及调用地址、发送参数、HTTP请求头和编码格式设置。文中提供了一个使用DeveloperSharp库发送POST请求的C#代码示例,用于发送短信,其中`IU.HttpPost`方法用于执行POST请求。此外,还提到了`HttpPost`方法的参数和返回值说明。最后简要提及了GET请求,通常用于URL带有查询参数的情况,并给出一个简单的GET请求示例。
|
7月前
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
332 2
|
Java API Apache
Java HTTP请求封装的方法及实现
在Java开发中,我们经常需要与服务器进行数据交互,发送HTTP请求是其中常见的一种方式。为了简化开发过程,我们可以封装HTTP请求的方法,让调用者只需要关注业务逻辑而不用关心底层的细节实现。本文将介绍一种基于Java的HTTP请求封装方法及其实现。
333 2
|
缓存 Java 数据库
.net调用http服务
前段时间刚将一个需求融入到OA产品中,又遇到了另一个问题,通过一个.net平台调用写好的服务,进行http请求,来实现两个项目之间信息的流转。
|
存储 Go 网络架构
Go HTTP 编程 | 02 - net/http 包剖析
Go HTTP 编程 | 02 - net/http 包剖析
Go HTTP 编程 | 02 - net/http 包剖析
|
Web App开发 网络协议 安全
一起谈.NET技术,HTTP协议及POST与GET操作差异,C#中如何使用POST、GET等
引言 HTTP协议我想任何IT人士都耳熟能详了,大家都能说出个所以然来。但是如果我问你HTTP协议的请求方法有哪些?POST与GET的差异?GET或POST传送数据量的大小有限制吗?HTTP响应的状态有哪些?以及在C#中你如何使用?如果你不能清楚地回答其中的大部分问题,那么这篇文章就是为你准备的!大纲如下: 1、HTTP概述 1.
1393 0
|
NoSQL .NET 数据库
ASP.NET WebApi服务接口如何防止重复请求实现HTTP幂等性(八)
一、背景描述与课程介绍 明人不说暗话,跟着阿笨一起玩WebApi。在我们平时开发项目中可能会出现下面这些情况; 1)、由于用户误操作,多次点击网页表单提交按钮。由于网速等原因造成页面卡顿,用户重复刷新提交页面。
3179 0