C# 模拟发送post请求,json格式数据、支持header参数

本文介绍了一种使用.NET发送POST请求的方法,通过将参数对象序列化为JSON,并支持header参数的传递。文章详细展示了如何创建HTTP请求,设置请求头,写入请求流,以及读取响应流。

.net 发送post请求,json、支持header参数

直接传入接口地址url,参数对象obj_model。就可以直接把数据以json的信息发送。post、json的方式支持大数据文本的提交。 dic可以根据需要传入header参数。

     public static string PostMoths(string url, object obj_model, Dictionary<string, string> dic = null)
        {
            string param = JsonConvert.SerializeObject(obj_model);
            System.Net.HttpWebRequest request;
            request = (System.Net.HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "application/json;charset=UTF-8";
            if (dic != null && dic.Count != 0)
            {
                foreach (var item in dic)
                {
                    request.Headers.Add(item.Key, item.Value);
                }
            }
            byte[] payload;
            payload = System.Text.Encoding.UTF8.GetBytes(param);
            request.ContentLength = payload.Length;
            string strValue = "";
            try
            {
                Stream writer = request.GetRequestStream();
                writer.Write(payload, 0, payload.Length);
                writer.Close();
                System.Net.HttpWebResponse response;
                response = (System.Net.HttpWebResponse)request.GetResponse();
                System.IO.Stream s;
                s = response.GetResponseStream();
                string StrDate = "";
                StreamReader Reader = new StreamReader(s, Encoding.UTF8);
                while ((StrDate = Reader.ReadLine()) != null)
                {
                    strValue += StrDate;
                }
            }
            catch (Exception e)
            {
                strValue = e.Message;
            }
            return strValue;
        }
C#中,使用`HttpClient`发送带有参数HeaderPOST请求是一种常见且高效的HTTP通信方式。以下是一个完整的实现方法,包括如何构造请求体(Body)和请求头(Headers)。 ### 发送带有参数HeaderPOST请求 使用`HttpClient`时,可以通过`StringContent`或`FormUrlEncodedContent`来构建请求体,并通过`HttpClient.DefaultRequestHeaders`或`HttpRequestMessage.Headers`来设置请求头。 #### 示例代码 ```csharp using System; using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { var client = new HttpClient(); // 设置请求头 client.DefaultRequestHeaders.Add("Authorization", "Bearer your_token_here"); client.DefaultRequestHeaders.Add("Accept", "application/json"); // 构造POST请求参数 var parameters = new Dictionary<string, string> { { "username", "example_user" }, { "password", "example_password" } }; // 将参数编码为表单格式 var content = new FormUrlEncodedContent(parameters); // 发送POST请求 var response = await client.PostAsync("https://example.com/api/login", content); // 获取响应内容 var responseString = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseString); } } ``` #### 使用`HttpRequestMessage`手动构建请求 如果需要更精细地控制请求,可以使用`HttpRequestMessage`来构建请求对象,这种方式可以更灵活地设置请求头和请求体。 ```csharp using System; using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { var client = new HttpClient(); // 创建请求对象并设置方法为POST var request = new HttpRequestMessage { Method = HttpMethod.Post, RequestUri = new Uri("https://example.com/api/login") }; // 设置请求头 request.Headers.Add("Authorization", "Bearer your_token_here"); request.Headers.Add("Accept", "application/json"); // 构造POST请求参数 var parameters = new Dictionary<string, string> { { "username", "example_user" }, { "password", "example_password" } }; // 将参数编码为表单格式 request.Content = new FormUrlEncodedContent(parameters); // 发送请求并获取响应 var response = await client.SendAsync(request); var responseString = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseString); } } ``` #### 使用JSON格式发送POST请求 如果需要发送JSON格式请求体,可以使用`StringContent`配合`MediaTypeHeaderValue`来构造请求内容。 ```csharp using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { var client = new HttpClient(); // 设置请求头 client.DefaultRequestHeaders.Add("Authorization", "Bearer your_token_here"); client.DefaultRequestHeaders.Add("Accept", "application/json"); // 构造JSON请求体 var jsonBody = "{\"username\":\"example_user\",\"password\":\"example_password\"}"; var content = new StringContent(jsonBody, Encoding.UTF8, "application/json"); // 发送POST请求 var response = await client.PostAsync("https://example.com/api/login", content); // 获取响应内容 var responseString = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseString); } } ``` 以上方法均基于`HttpClient`实现,适用于现代C#开发环境。根据实际需求选择合适的请求构造方式,可以灵活地处理参数请求头的设置
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值