C# 发出异步的Get请求
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 发出异步的Get请求相关的知识,希望对你有一定的参考价值。
下列的下载代码示例是 HttpClientSample。它以不同的方式异步调用Web 服务。为了演示本例使用的不同方法,使用了命令行参数。
示例代码使用了以下名称空间:
System
System.Linq
System.Net
System.Net.Http
System.Net.Http.Headers
System.Threading
System.Threading.Tasks
第一段代码实例化一个 HttpClient 对象,把它赋予私有字段 _httpClient,以进行重用。这个 HttpClient 对象是线程安全的,所以一个 HttpClient 对象就可以用于处理多个请求。HttpClient 的每个实例都维护它自己的线程池,所以 HttpClient 实例之间的请求会被隔离。
接着调用 GetAsync,给它传递要调用的方法的地址,把一个 HTTP GET 请求发送给服务器。GetAsync 调用被重载为带一个字符串或 URI 对象。
对GetAsync 的调用返回一个HttpResponseMessage 对象。HttpResponseMessage 类表示包含标题、状态和内容的响应。检查响应的IsSuccessfulStatusCode属性,可以确定请求是否成功。如果调用成功,就使用 ReadAsStringAsync 方法把返回的内容检索为一个字符串:
private const string NorthwindUrl =
"http://services.data.org/Northwind/Northwind.svc/Regions";
private const string IncorrectUrl =
"http://services.data.org/Northwind1/Northwind.svc/Regions";
private HttpClient _httpClient;
public HttpClient HttpClient =>
_httpClient ?? (_httpClient = new HttpClient());
private async Task GetDataSimpleAsync()
HttpResponseMessage response = await HttpClient.GetAsync(NorthwindUrl);
if(response.IsSuccessStatusCode)
Console.WriteLine($"Response Status Code: (int)response.StatusCode " +
$"response.ReasonPhrase") ;
string responseBodyAsText =await response.Content.ReadAsStringAsyne();
Console.WriteLine($"Received payload of responseBodyAsText.Length characters");
Console.WriteLine();
Console.WriteLine(responseBodyAsText);
用命令行参数 -s 执行这段代码,产生以下输出:
Response Status Code: 200 OK
Received payload of 3379 characters
<?xml version="1.0" encoding="utf-8"?>
<!- ... ->
注意:
因为 HttpClient 类使用 GetAsync 方法调用,且使用了 await 关键字,所以返回调用线程,并可以执行其他工作。GetAsync 方法的结果可用时,就用该方法继续线程,响应写入 response 变量。
微信公众号
Dotnet讲堂
以上是关于C# 发出异步的Get请求的主要内容,如果未能解决你的问题,请参考以下文章