C#使用HttpClient四種請求數據格式:json、表單數據、文件上傳、xml。現在流行前后端分離,后端提供對應服務接口給前端或跨應用程序調用,如WebAPI等。在調用這些服務接口發送HTTP請求,而.NET為我們提供了HttpWebRequest、HttpClient幾個類庫來實現。
一、JSON數據格式
application/json
引用
using Newtonsoft.Json;
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace Fountain.WinConsole.HttpDemo
代碼
static async Task Main(string[] args)
{
try
{
using (HttpClient httpClient = new HttpClient())
{
User user = new User();
user.username = "ceshi";
user.password = "123456";
string jsonData = JsonConvert.SerializeObject(user);
StringContent content = new StringContent(jsonData, Encoding.UTF8);
// 設置HTTP 響應上的ContentType --application/json
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
// 請求訪問地址
string url = "https://192.168.20.20/api/user/login";
// 發出HTTP的Post請求
HttpResponseMessage response = await httpClient.PostAsync(url, content);
// 讀取返回結果
string responseContent = await response.Content.ReadAsStringAsync();
// 將字符轉對象
Result result = JsonConvert.DeserializeObject<Result>(responseContent);
}
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
Console.ReadLine();
}
二、表單數據格式
application/x-www-form-urlencoded
引用
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
代碼
static async Task Main(string[] args)
{
try
{
using (HttpClient httpClient = new HttpClient())
{
Dictionary<string,string> user = new Dictionary<string, string>
{
{ "username", "ceshi" },
{ "password", "123456" }
};
FormUrlEncodedContent content = new FormUrlEncodedContent(user);
// 請求訪問地址
string url = "https://192.168.20.20/api/user/login";
// 發出HTTP的Post請求
HttpResponseMessage response = await httpClient.PostAsync(url, content);
// 讀取返回結果
string responseContent = await response.Content.ReadAsStringAsync();
// 將字符轉對象
Result result = JsonConvert.DeserializeObject<Result>(responseContent);
}
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
Console.ReadLine();
}
三、文件上傳格式
multipart/form-data
引用
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
代碼
static async Task Main(string[] args)
{
try
{
using (HttpClient httpClient = new HttpClient())
{
MultipartFormDataContent multipartContent = new MultipartFormDataContent();
multipartContent.Add(new StringContent("user"), "test");
multipartContent.Add(new ByteArrayContent(File.ReadAllBytes(string.Format("{0}{1}", AppDomain.CurrentDomain.BaseDirectory, "test.jpg"))), "image", "test.jpg");
// 請求訪問地址
string url = "https://192.168.20.20/api/user/upload";
// 發出HTTP的Post請求
HttpResponseMessage response = await httpClient.PostAsync(url, multipartContent);
// 讀取返回結果
string responseContent = await response.Content.ReadAsStringAsync();
// 將字符轉對象
Result result = JsonConvert.DeserializeObject<Result>(responseContent);
}
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
Console.ReadLine();
}
}
四、XML數據格式
text/xml
引用
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
代碼
static async Task Main(string[] args)
{
try
{
using (HttpClient httpClient = new HttpClient())
{
StringBuilder user = new StringBuilder();
user.AppendLine("<usrname>ceshi</usrname>");
user.AppendLine("<password>123456</password>");
string xmlData = user.ToString();
StringContent content = new StringContent(xmlData, Encoding.UTF8);
// 設置HTTP 響應上的ContentType --text/xml
content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
// 請求訪問地址
string url = "https://192.168.20.20/api/user/login";
// 發出HTTP的Post請求
HttpResponseMessage response = await httpClient.PostAsync(url, content);
// 讀取返回結果
string responseContent = await response.Content.ReadAsStringAsync();
// 將字符轉對象
Result result = JsonConvert.DeserializeObject<Result>(responseContent);
}
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
Console.ReadLine();
}
HttpClient的一些屬性與方法。
屬性:
BaseAddress
獲取或設置發送請求時地址。
DefaultProxy
獲取或設置全局HTTP請求代理。
DefaultRequestHeaders
獲取請求發送的標題。
DefaultRequestVersion
獲取或設置請求使用的默認HTTP版本。
MaxResponseContentBufferSize
獲取或設置讀取響應內容時要緩沖的最大字節數。
Timeout
獲取或設置請求超時等待的時間。
方法:
GetAsync
異步請求獲取指定URI。
GetByteArrayAsync
異步請求獲取指定URI并以字節數組的形式返回響應。
GetStreamAsync
異步請求獲取指定URI并以流的形式返回響應。
GetStringAsync
異步請求獲取指定URI并以字符串的形式返回響應正文。
PostAsync
異步將POST請求發送給指定URI。
Send
發送帶有指定請求的 HTTP 請求。
SendAsync
以異步操作發送 HTTP 請求。
閱讀原文:原文鏈接
該文章在 2025/2/17 12:23:54 編輯過