c# 使用HttpClient的post,get方法传输json

C#中通过HttpClient发送Post请求 C#中HttpClient进行各种类型的传输 我们可以看到, 尽管PostAsync有四个重载函数, 但是接受的都是HttpContent, 而查看源码可以看到, HttpContent是一个抽象类 那我们就不可能直接创建HttpContent的实例, 而需要去找他的实现类, 经过一番研究, 发现了, 如下四个: MultipartFormDataContent、FormUrlEncodedContent、StringContent、StreamContent 和上面的总结进... 阅读详情

微软文档地址https://docs.microsoft.com/zh-cn/dotnet/api/system.net.http.httpclient?view=netframework-4.7.2,只有get。post 的方法找了白天才解决

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
using System.Timers;
using Newtonsoft.Json;
using System.Net.Http;
using System.IO;
using System.Net;
public class user
        {
            public string password;//密码hash
            public string account;//账户
        }

        static async void TaskAsync()
        {

            
            using (var client = new HttpClient())
            {
                
                try
                {
                    //序列化
                    user user = new user();
                    user.account = "zanllp";
                    user.password = "zanllp_pw";
                    var str = JsonConvert.SerializeObject(user);

                    HttpContent content =new StringContent(str);
                    content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
                    HttpResponseMessage response = await client.PostAsync("http://255.255.255.254:5000/api/auth", content);//改成自己的
                    response.EnsureSuccessStatusCode();//用来抛异常的
                    string responseBody = await response.Content.ReadAsStringAsync();
                    Console.WriteLine(responseBody);
                }
                catch (Exception e)
                {
                    Console.WriteLine("\nException Caught!");
                    Console.WriteLine("Message :{0} ", e.Message);
                }
            }

            using (HttpClient client = new HttpClient())
            {
                try
                {
                    HttpResponseMessage response = await client.GetAsync("http://255.255.255.254:5000/api/auth");
                    response.EnsureSuccessStatusCode();//用来抛异常的
                    string responseBody = await response.Content.ReadAsStringAsync();
                    Console.WriteLine(responseBody);
                }
                catch (HttpRequestException e)
                {
                    Console.WriteLine("\nException Caught!");
                    Console.WriteLine("Message :{0} ", e.Message);
                }
            }
        }
 static void Main(string[] args)
        {
            TaskAsync();
            
            Console.ReadKey();
        }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

在阿里云上的.Net Core on Linux

自己封装的类,我几乎所有的个人项目都用这个
using ICSharpCode.SharpZipLib.GZip;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

/// <summary>
/// 基于HttpClient封装的请求类
/// </summary>
public class HttpRequest
{
    /// <summary>
    /// 使用post方法异步请求
    /// </summary>
    /// <param name="url">目标链接</param>
    /// <param name="json">发送的参数字符串,只能用json</param>
    /// <returns>返回的字符串</returns>
    public static async Task<string> PostAsyncJson(string url, string json)
    {
        HttpClient client = new HttpClient();
        HttpContent content = new StringContent(json);
        content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
        HttpResponseMessage response = await client.PostAsync(url, content);
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();
        return responseBody;
    }

    /// <summary>
    /// 使用post方法异步请求
    /// </summary>
    /// <param name="url">目标链接</param>
    /// <param name="data">发送的参数字符串</param>
    /// <returns>返回的字符串</returns>
    public static async Task<string> PostAsync(string url, string data, Dictionary<string, string> header = null, bool Gzip = false)
    {
        HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false });
        HttpContent content = new StringContent(data);
        if (header != null)
        {
            client.DefaultRequestHeaders.Clear();
            foreach (var item in header)
            {
                client.DefaultRequestHeaders.Add(item.Key, item.Value);
            }
        }
        HttpResponseMessage response = await client.PostAsync(url, content);
        response.EnsureSuccessStatusCode();
        string responseBody = "";
        if (Gzip)
        {
            GZipInputStream inputStream = new GZipInputStream(await response.Content.ReadAsStreamAsync());
            responseBody = new StreamReader(inputStream).ReadToEnd();
        }
        else
        {
            responseBody = await response.Content.ReadAsStringAsync();

        }
        return responseBody;
    }

    /// <summary>
    /// 使用get方法异步请求
    /// </summary>
    /// <param name="url">目标链接</param>
    /// <returns>返回的字符串</returns>
    public static async Task<string> GetAsync(string url, Dictionary<string, string> header = null, bool Gzip = false)
    {

        HttpClient client = new HttpClient(new HttpClientHandler() { UseCookies = false });
        if (header != null)
        {
            client.DefaultRequestHeaders.Clear();
            foreach (var item in header)
            {
                client.DefaultRequestHeaders.Add(item.Key, item.Value);
            }
        }
        HttpResponseMessage response = await client.GetAsync(url);
        response.EnsureSuccessStatusCode();//用来抛异常的
        string responseBody = "";
        if (Gzip)
        {
            GZipInputStream inputStream = new GZipInputStream(await response.Content.ReadAsStreamAsync());
            responseBody = new StreamReader(inputStream).ReadToEnd();
        }
        else
        {
            responseBody = await response.Content.ReadAsStringAsync();

        }
        return responseBody;
    }

    /// <summary>
    /// 使用post返回异步请求直接返回对象
    /// </summary>
    /// <typeparam name="T">返回对象类型</typeparam>
    /// <typeparam name="T2">请求对象类型</typeparam>
    /// <param name="url">请求链接</param>
    /// <param name="obj">请求对象数据</param>
    /// <returns>请求返回的目标对象</returns>
    public static async Task<T> PostObjectAsync<T, T2>(string url, T2 obj)
    {
        String json = JsonConvert.SerializeObject(obj);
        string responseBody = await PostAsyncJson(url, json); //请求当前账户的信息
        return JsonConvert.DeserializeObject<T>(responseBody);//把收到的字符串序列化
    }

    /// <summary>
    /// 使用Get返回异步请求直接返回对象
    /// </summary>
    /// <typeparam name="T">请求对象类型</typeparam>
    /// <param name="url">请求链接</param>
    /// <returns>返回请求的对象</returns>
    public static async Task<T> GetObjectAsync<T>(string url)
    {
        string responseBody = await GetAsync(url); //请求当前账户的信息
        return JsonConvert.DeserializeObject<T>(responseBody);//把收到的字符串序列化
    }
}
--------------------- 

原文:https://blog.youkuaiyun.com/zanllp/article/details/85501932 
版权声明:本文为博主原创文章,转载请附上博文链接!

C#中HttpClient的使用与最佳实践 HTTP协议是现代Web开发中客户端与服务器通信的基础,支持多种请求方法和内容类型。在.NET生态中,HttpClient作为核心网络组件,遵循HTTP/1.1和HTTP/2规范,提供了强大的API支持异步操作和请求定制。正确使用HttpClient能显著提升应用性能,特别是在处理高并发请求时,需要注意生命周期管理以避免端口耗尽问题。通过IHttpClientFactory和Polly等工具,开发者可以实现连接池管理、自动重试等高级功能,这些技术在微服务架构和API调用场景中尤为重要。本文以C#为例,详细讲 阅读详情

相关推荐

C#中HttpClient实现HTTP请求的全面指南

HTTP协议作为Web开发的基础通信协议,通过请求-响应模型实现客户端与服务器的数据交换。在C#开发中,System.Net.Http命名空间下的HttpClient类提供了简洁高效的API,支持GET、POST等多种请求方法,并内置连接池管理和异常处理机制。理解HttpClient的生命周期管理和性能优化策略,能够有效避免端口耗尽等问题,提升应用稳定性。本文以实际代码示例展示如何实现REST API调用、文件上传等常见场景,同时介绍IHttpClientFactory和Refit等现代解决方案,帮助开发者

weixin_30776545的博客 383

C# 中使用HttpClient读取大型Json数据集

问题:如何使用HTTP读取大型JSON数据?在工作中我们经常需要调用api获取数据,这些数据大多数情况下都小型的,比如分页获取数据等。通常不使用HTTP方式传输大型数据。然而再最近的一工作...

dotNET跨平台 1223

Winform中怎样使用HttpClient调用http的get和post接口并将接口返回json数据解析为实体类

场景 需要在Winform的页面初始化之后,调用http的接口,并将返回的json数据 解析,赋值到窗体中的TextBox组件中。 使用接口测试工具测试的接口返回数据如下 注: 博客:霸道流氓气质的博客_优快云博客-C#,架构之路,SpringBoot领域博主 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。 实现 1、调用get接口 var httpClient = new HttpClient(); var url

BADAO_LIUMANG_QIZHI的博客 5657

C# httpClient Post 请求带JSON传输方式

I'm sorry, but I need a little more context to understand what you're looking for. Can you please provide more information or ask a specific question?

weixin_42588877的博客 696

C#中实现HTTP POST操作的详细指南

在互联网应用中,认证机制的实现方式多种多样,每种方法都有其独特的应用场景和安全级别。以下是一些常见的认证方法:基本认证(Basic Authentication):这是一种简单的认证方式,通常通过HTTP协议中的头部实现。用户名和密码被编码后附加在请求头中,由于密码是明文传输,因此安全性不高。摘要认证(Digest Authentication):这是为了解决基本认证中明文密码问题而提出的。摘要认证通过提供一种单向哈希函数的方式,来避免直接传输明文密码。

weixin_42573757的博客 2793

C#实现的高效POST数据提交工具详解与实战

在现代软件开发中,前后端分离架构和微服务模式的广泛应用使得HTTP通信成为系统交互的核心机制。其中,POST请求作为数据提交的重要方式,承担着用户注册、登录认证、表单提交、API调用等关键任务。为此,构建一个高效、稳定且易于扩展的C# POST提交工具,不仅能够提升开发效率,还能为自动化测试、接口调试和系统集成提供强有力的支撑。该工具基于.NET平台的HttpClient类进行封装,支持表单数据与JSON格式的灵活提交,具备异步处理能力、响应解析机制以及可扩展的参数传递模型。通过。

weixin_32921023的博客 1355

.net 调用API并解析Json数据方法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34088838的博客 392

C#调用POST接口实战:从HttpClient到超时与异常排查

在前后端分离与Web API盛行的今天,HTTP接口调用已成为软件开发的基础技能,而POST请求则承载着登录、下单、文件上传等核心业务场景。理解POST的本质——请求头定义格式、请求体传递数据、响应码反映结果——是高效对接接口的前提。C#作为桌面应用与上位机开发的主流语言,借助HttpClient可以优雅地完成这些交互。然而,从设置正确的Content-Type到处理Token鉴权,从超时控制到避免Socket连接耗尽,每一步都隐藏着影响稳定性的细节。面对Connection reset、请求超时、中文乱码

weixin_33883104的博客 333

C# HttpClient教程

在日常开发中经常会用到别人写的接口数据,那么访问该接口的方式很多。这里我们主要学习使用HttpClient类发送各种请求操作。

CoderYang 1万+

C#网络请求实践:控制台应用程序源码解析

C#提供了几个用于网络请求的类库。最基础的是System.Net和命名空间,它们提供了大量的网络编程类。和HttpClient是C#中最常用的两个类,用于发起HTTP网络请求。在C#中,类提供了一种方法来发送HTTP请求并接收HTTP响应。创建一个实例,我们通常遵循以下步骤:// 创建一个WebRequest的实例,该实例对于GET请求是默认的。// 如果需要,可以将请求更改为POST请求。

weixin_42388898的博客 1123

C# 实现一键登录126邮箱POST源码解析

C#网络编程是使用C#语言对网络应用进行开发的过程。它包括了在客户端和服务器之间建立连接、发送和接收数据的编程技术。本章我们将介绍C#中网络编程的基础知识,为理解后续的HTTP POST请求和C#编程实践打下坚实的基础。HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议。它采用客户端/服务器模型,允许客户端向服务器发送请求,并接收来自服务器的响应。在请求/响应模型中,客户端通过发送HTTP请求向服务器请求资源,服务器响应这些请求,并在适当的时候返回所请求的资源。

weixin_29443363的博客 650

c#httpclient 代理_C# HttpClient 请求认证、数据传输笔记

C# HttpClient 请求认证、数据传输笔记一,授权认证客户端请求服务器时,需要通过授权认证许可,方能获取服务器资源,目前比较常见的认证方式有 Basic 、JWT、Cookie。HttpClient 是 C# 中的 HTTP/HTTPS 客户端,用于发送 HTTP 请求和接收来自通过 URI 确认的资源的 HTTP 响应。下面以具体代码做示范。1. 基础认证示例// Basic基础认证pu...

weixin_39571087的博客 1749

C#中基于HttpClient的API调用实战项目

在实际项目中,服务端常采用 camelCase 命名风格(如 JavaScript 生态),而 C# 习惯使用 PascalCase。为此,可通过配置实现自动转换。从.NET Core 2.1起,微软引入作为官方推荐的解决方案。它不仅能有效管理HttpClient生命周期,还能集成Polly实现重试、超时、熔断等企业级功能。注册方式(Program.cs或Startup.cs):});使用时依赖注入:在微服务架构中,一个请求可能跨越多个服务节点。

weixin_33773084的博客 711

使用Java调用Http接口(post,get)

package com.xiaocaimi.open.common.util; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.ap...

u012497072的博客 1740

HttpClient使用HttpGet进行json数据传输(所使用的jar.zip)

NULL 博文链接:https://zhcheng.iteye.com/blog/1292350

分析方法—temporal receptive field(TRF)

总结来说,时间感受野其实就是一个 filter!课程中的描述—.(使用时间感受野与刺激进行卷积来描述)时间感受野一般是听觉计算中使用的,在视觉中,有另一种分析叫做空间感受野(spatial receptive fields)。回归权重(Regression weights)是指在回归分析中用于估计自变量与因变量之间关系的权重或系数。回归分析是一种统计方法,用于建立自变量与因变量之间的关联模型,并通过拟合数据来估计模型中的参数。在简单线性回归中,只有一个自变量与一个因变量之间的关系被建模。

m0_51474171的博客 1603
上一篇: C# .NET MVC 通用框架----实现的功能模块
下一篇: NopCommerce学习笔记----1.源码结构及技术知识内容
卓炳坤
博客等级 码龄10年 33粉丝 39原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值