.net core模拟发送request请求或post请求,即httppost和httpget请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
string url = "http://www.xxx.com/api/postmsg"; string jsonContent = JsonConvert.SerializeObject(message); using (var client = new HttpClient()) { var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"); //上面代码使http Content-Type 为 application/json; charset=utf-8。如果希望Content-Type为application/json,可以使用下面两行代码 //content.Headers.Remove("Content-Type"); // "{application/json; charset=utf-8}" //content.Headers.Add("Content-Type", "application/json"); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer"); string result = client.PostAsync(url, content).Result.Content.ReadAsStringAsync().Result; } |
以上为核心代码。
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/http-requests?view=aspnetcore-2.2
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 |
/// <summary> /// 公共方法—— 发送http post请求 2020年6月2日11:20:42 Dennyhui /// </summary> /// <param name="formData">参数</param> /// <param name="requestUri">请求地址</param> /// <param name="token">身份验证秘钥,可为空</param> /// <returns></returns> public async Task<string> Client_Post(MultipartFormDataContent formData, string requestUri, string token) { //从工厂获取请求对象 var client = _httpClientFactory.CreateClient(); //添加请求头 if (!string.IsNullOrWhiteSpace(token)) { client.DefaultRequestHeaders.Add("Authorization", token); } HttpResponseMessage response = client.PostAsync(requestUri, formData).Result; return response.Content.ReadAsStringAsync().Result; } /// <summary> /// 公共方法—— 发送http get 请求 2020年6月2日11:22:11 Dennyhui /// <para>最终以url参数的方式提交</para> /// </summary> /// <param name="parameters">参数字典,可为空</param> /// <param name="requestUri">例如/api/Files/UploadFile</param> /// <returns></returns> public async Task<string> Client_Get(Dictionary<string, string> parameters, string requestUri, string token) { //从工厂获取请求对象 var client = _httpClientFactory.CreateClient(); //添加请求头 if (!string.IsNullOrWhiteSpace(token)) { client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token); } //拼接地址 if (parameters != null) { var strParam = string.Join("&", parameters.Select(o => o.Key + "=" + o.Value)); requestUri = string.Concat(requestUri, '?', strParam); } client.BaseAddress = new Uri(requestUri); //client.DefaultRequestHeaders.Add("Content-Type", "application/json; charset=utf-8"); return client.GetStringAsync(requestUri).Result; } |
httpget或get请求
It looks like it is an extension method (in System.Net.Http.Formatting):
Update:
PM> install-package Microsoft.AspNet.WebApi.Client
According to the System.Net.Http.Formatting NuGet package page, the System.Net.Http.Formatting
package is now legacy and can instead be found in the Microsoft.AspNet.WebApi.Client
package available on NuGet here.
HttpContent.ReadAsAsync<T>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class RepoService { // _httpClient isn't exposed publicly private readonly HttpClient _httpClient; public RepoService(HttpClient client) { _httpClient = client; } public async Task<IEnumerable<string>> GetRepos() { var response = await _httpClient.GetAsync("aspnet/repos"); response.EnsureSuccessStatusCode(); var result = await response.Content .ReadAsAsync<IEnumerable<string>>(); return result; } } |
添加头标识header:
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 |
public class GitHubService { public HttpClient Client { get; } public GitHubService(HttpClient client) { client.BaseAddress = new Uri("https://api.github.com/"); // GitHub API versioning client.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json"); // GitHub requires a user-agent client.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample"); Client = client; } public async Task<IEnumerable<GitHubIssue>> GetAspNetDocsIssues() { var response = await Client.GetAsync( "/repos/dotnet/AspNetCore.Docs/issues?state=open&sort=created&direction=desc"); response.EnsureSuccessStatusCode(); var result = await response.Content .ReadAsAsync<IEnumerable<GitHubIssue>>(); return result; } } |
详细参考:
发表评论