日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中通过HttpClient发送Post请求

發布時間:2023/12/18 C# 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中通过HttpClient发送Post请求 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C#中HttpClient進行各種類型的傳輸

?

?我們可以看到, 盡管PostAsync有四個重載函數, 但是接受的都是HttpContent, 而查看源碼可以看到, HttpContent是一個抽象類

?

?那我們就不可能直接創建HttpContent的實例, 而需要去找他的實現類, 經過一番研究, 發現了, 如下四個:

MultipartFormDataContent、FormUrlEncodedContent、StringContent、StreamContent

和上面的總結進行一個對比就能發現端倪:

MultipartFormDataContent=》multipart/form-data

FormUrlEncodedContent=》application/x-www-form-urlencoded

StringContent=》application/json等

StreamContent=》binary

而和上面總結的一樣FormUrlEncodedContent只是一個特殊的StringContent罷了, 唯一不同的就是在mediaType之前自己手動進行一下URL編碼罷了(這一條純屬猜測, 邏輯上應該是沒有問題的).

c# 使用HttpClient的post,get方法傳輸json

微軟文檔地址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();
? ? ? ? }
?

在阿里云上的.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);//把收到的字符串序列化
? ? }
}
C# 使用 HttpClient 進行http GET/POST請求


using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
namespace HTTPRequest
{
????class Program
????{
????????static void Main(string[] args)
????????{
???????????
????????????HttpClient httpClient = new HttpClient();
????????????Task<byte[]> task0= httpClient.GetByteArrayAsync("http://127.0.0.1");
????????????task0.Wait();
???????????// while (!task0.IsCompletedSuccessfully) { };
????????????byte[] bresult=task0.Result;
????????????string sresult = System.Text.Encoding.Default.GetString(bresult);
????????????Console.WriteLine(sresult);
??????????// ?Console.ReadLine();
????????????-------
????????????HttpClient httpClient0 = new HttpClient();
????????????List<KeyValuePair<string, string>> param = new List<KeyValuePair<string, string>>();
????????????param.Add(new KeyValuePair<string, string>("xx", "xx"));
???????????Task<HttpResponseMessage> responseMessage ?=httpClient0.PostAsync("http://localhost:1083/Home/Test", new FormUrlEncodedContent(param));
????????????responseMessage.Wait();
???????????Task<string> reString= responseMessage.Result.Content.ReadAsStringAsync();
????????????reString.Wait();
????????????Console.WriteLine(reString.Result);
????????????Console.ReadLine();
?
????????}
????}
}
?

總結

以上是生活随笔為你收集整理的C#中通过HttpClient发送Post请求的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。