下列的下载代码示例是 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请求相关推荐

  1. Chrome浏览器对统一资源发出多个请求时,导致最多停止20s问题

    Chrome浏览器对统一资源发出多个请求时,导致最多停止20s问题 Chrome浏览器对统一资源发出多个请求时,导致最多停止20s问题 使用环境: 问题描述: 解决方案: 永久: 临时: 参考文档主要 ...

  2. 如何让jQuery执行同步而不是异步的Ajax请求?

    我有一个提供标准扩展点的JavaScript小部件. 其中之一是beforecreate函数. 它应该返回false以防止创建项目. 我已经使用jQuery在此函数中添加了Ajax调用: before ...

  3. 如何在node.js中发出HTTP POST请求?

    如何在node.js中使用数据发出出站HTTP POST请求? #1楼 如果您使用请求库,这会变得更容易. var request = require('request');request.post( ...

  4. 如何在客户端终止一个已经发出的HTTP请求

    Javascript 异步编程得益于 Promise 的实现,它们极大地提高了Web开发的性能和体验.不过原生的 Promise 有个最大的缺点就是一旦请求发出去,我们就无法取消它.但是我们找到了另一 ...

  5. java同一秒请求多次接口_java – 限制用户每秒发出有限的请求

    环境: 基于 Java-EE的Web应用程序 问题: 需要限制用户在同一秒内发出超过5个(例如)请求(主要是BOT) 方案: 作为一个基本设计,我计划在应用范围内有2个同步Map Map> 字符 ...

  6. python lib head,使用Python 2中的urllib2发出HTTP HEAD请求

    我正在尝试使用Python 2对页面执行HEAD请求. 我在努力import misc_urllib2 ..... opender = urllib2.build_opener([misc_urlli ...

  7. fiddler修改客户端发出去的请求

    设置断点的两种方式: 1.通过工具栏设置断点 步骤:Rules --Automatic Breakpoints --选中 Before Requests 设置之后,客户端或者浏览器发起请求,模拟Goo ...

  8. php 使用guzzle发送异步的HTTP请求

    安装使用composer composer require guzzlehttp/guzzle 代码式例 use GuzzleHttp\Client; use GuzzleHttp\Exception ...

  9. 如何使用rest client插件发出json参数请求

    一.安装rest client插件 google浏览器安装:需要科学上网工具 1.设置-拓展程序   展开左侧菜单栏,菜单栏下放有个打开chrome网上应用商店.进去之后搜 rest client即可 ...

最新文章

  1. Python 可视化近 90 天的百度搜索指数 + 词云图
  2. java图形界面设计 swing之JTable表格的创建使用-添加鼠标监听
  3. [Stardust]星尘分布式全链路监控
  4. python n个list如何组成矩阵_通过学习在processing中操作图片,掌握python 列表操作...
  5. android 融云浏览大图,融云 Android sdk kit 头像昵称更新机制
  6. input传给java_java inputstream 传递给 py 处理
  7. PS替换图片图标操作
  8. 多线程-线程间通信-多生产者多消费者示例
  9. spring mvc controller间跳转 重定向 传参 (转)
  10. 【Unity3D插件】XCharts插件分享《图表插件》
  11. 基础 八大疑问词+翻译
  12. MySQL 5.5.20 中文乱码:我的抗争解决史
  13. Please, configure Web Facet first!的解决办法
  14. CTFshow——web入门——php特性(上篇)
  15. php如何配置gii,Yii2之gii的配置与使用
  16. EAX AX等寄存器之间的关系
  17. SpringBoot+Vue+Mybatis-plus 博客(一):完成博客后台前端登录页面、后端登录接口
  18. 大鱼app是什么 大鱼怎么省钱 ?
  19. 计算机专业显卡,NVIDIA专业计算机显卡QuadrO性能揭秘.doc
  20. Explain 执行计划详解

热门文章

  1. JS---------正则表达式
  2. ORACLE TDE 透明数据加密技术
  3. Python中第三方的库(library)、模块(module),包(package)的安装方法以及ImportError: No module named...
  4. artDialog ( v 6.0.2 ) content 参数引入页面 html 内容
  5. MYSQL,Oracle,SQL数据库在JSP中的驱动
  6. PHP IE中下载附件问题
  7. 应用安全-操作系统安全-漏洞修复整理
  8. 三、SpringBoot-application.properties配置文件和application.yml配置文件
  9. 转帖不会乱码的,powershell网络蜘蛛
  10. maven中pom.xml中的scope讲解