准备工作

1.visual studio 2015 update3开发环境

2.net core 1.0.1 及以上版本

 目录

1.HttpGet方法

2.HttpPost方法

3.使用示例

4.代码下载

 1 HttpGet

 /// <summary>
/// 使用Get方法获取字符串结果(没有加入Cookie)
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static async Task<string> HttpGetAsync(string url, Encoding encoding = null)
{
HttpClient httpClient = new HttpClient();
var data = await httpClient.GetByteArrayAsync(url);
var ret = encoding.GetString(data);
return ret;
}
/// <summary>
/// Http Get 同步方法
/// </summary>
/// <param name="url"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string HttpGet(string url, Encoding encoding = null)
{
HttpClient httpClient = new HttpClient();
var t = httpClient.GetByteArrayAsync(url);
t.Wait();
var ret = encoding.GetString(t.Result);
return ret;
}

  

 2 HttpPost方法

 /// <summary>
/// POST 异步
/// </summary>
/// <param name="url"></param>
/// <param name="postStream"></param>
/// <param name="encoding"></param>
/// <param name="timeOut"></param>
/// <returns></returns>
public static async Task<string> HttpPostAsync(string url, Dictionary<string, string> formData = null, Encoding encoding = null, int timeOut = 10000 )
{ HttpClientHandler handler = new HttpClientHandler(); HttpClient client = new HttpClient(handler);
MemoryStream ms = new MemoryStream();
formData.FillFormDataStream(ms);//填充formData
HttpContent hc = new StreamContent(ms); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xhtml+xml"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml", 0.9));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("image/webp"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*", 0.8));
hc.Headers.Add("UserAgent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36");
hc.Headers.Add("Timeout", timeOut.ToString());
hc.Headers.Add("KeepAlive", "true"); var r = await client.PostAsync(url, hc);
byte[] tmp = await r.Content.ReadAsByteArrayAsync(); return encoding.GetString(tmp);
} /// <summary>
/// POST 同步
/// </summary>
/// <param name="url"></param>
/// <param name="postStream"></param>
/// <param name="encoding"></param>
/// <param name="timeOut"></param>
/// <returns></returns>
public static string HttpPost(string url, Dictionary<string, string> formData = null, Encoding encoding = null, int timeOut = 10000)
{ HttpClientHandler handler = new HttpClientHandler(); HttpClient client = new HttpClient(handler);
MemoryStream ms = new MemoryStream();
formData.FillFormDataStream(ms);//填充formData
HttpContent hc = new StreamContent(ms); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xhtml+xml"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml", 0.9));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("image/webp"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*", 0.8));
hc.Headers.Add("UserAgent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36");
hc.Headers.Add("Timeout", timeOut.ToString());
hc.Headers.Add("KeepAlive", "true"); var t = client.PostAsync(url, hc);
t.Wait();
var t2 = t.Result.Content.ReadAsByteArrayAsync();
return encoding.GetString(t2.Result);
}
/// <summary>
/// 组装QueryString的方法
/// 参数之间用&连接,首位没有符号,如:a=1&b=2&c=3
/// </summary>
/// <param name="formData"></param>
/// <returns></returns>
public static string GetQueryString(this Dictionary<string, string> formData)
{
if (formData == null || formData.Count == 0)
{
return "";
} StringBuilder sb = new StringBuilder(); var i = 0;
foreach (var kv in formData)
{
i++;
sb.AppendFormat("{0}={1}", kv.Key, kv.Value);
if (i < formData.Count)
{
sb.Append("&");
}
} return sb.ToString();
}
/// <summary>
/// 填充表单信息的Stream
/// </summary>
/// <param name="formData"></param>
/// <param name="stream"></param>
public static void FillFormDataStream(this Dictionary<string, string> formData, Stream stream)
{
string dataString = GetQueryString(formData);
var formDataBytes = formData == null ? new byte[0] : Encoding.UTF8.GetBytes(dataString);
stream.Write(formDataBytes, 0, formDataBytes.Length);
stream.Seek(0, SeekOrigin.Begin);//设置指针读取位置
}

  

3 示例

修改View下面的index.cshtml文件

@{
ViewData["Title"] = "Home Page";
Layout = null;
} @{
@*var ret1=await httpclientdemo.HttpHelper.HttpGetAsync("http://www.baidu.com", System.Text.Encoding.GetEncoding("utf-8"));
@Html.Raw(ret1)*@ @*var ret2 = httpclientdemo.HttpHelper.HttpGet("http://www.baidu.com", System.Text.Encoding.GetEncoding("utf-8"));
@Html.Raw(ret2)*@ var ret3 = httpclientdemo.HttpHelper.HttpPost("http://www.baidu.com",null, System.Text.Encoding.GetEncoding("utf-8"));
@Html.Raw(ret3) @*var ret4 = await httpclientdemo.HttpHelper.HttpPostAsync("http://www.baidu.com", null, System.Text.Encoding.GetEncoding("utf-8"),10000);
@Html.Raw(ret4)*@
}

 

4 代码下载

链接:http://pan.baidu.com/s/1gfdqwDX 密码: dxzp

asp.net core中使用HttpClient实现Post和Get的同步异步方法的更多相关文章

  1. ASP.NET Core教程:在ASP.NET Core中使用HttPClient调用WebService

    一.前言 在以前的一篇文章中,曾经讲述过如何在ASP.NET Core中调用WebService.但是那种方式是通过静态引用的方式去调用的,如果是在生产环境中,肯定不能使用这种方式去调用,幸运的是微软 ...

  2. Asp.Net Core中HttpClient的使用方式

    在.Net Core应用开发中,调用第三方接口也是常有的事情,HttpClient使用人数.使用频率算是最高的一种了,在.Net Core中,HttpClient的使用方式随着版本的升级也发生了一些变 ...

  3. ASP.NET Core中如何针对一个使用HttpClient对象的类编写单元测试

    原文地址: How to unit test a class that consumes an HttpClient with IHttpClientFactory in ASP.NET Core? ...

  4. Asp.Net Core 轻松学-HttpClient的演进和避坑

    前言     在 Asp.Net Core 1.0 时代,由于设计上的问题, HttpClient 给开发者带来了无尽的困扰,用 Asp.Net Core 开发团队的话来说就是:我们注意到,HttpC ...

  5. [翻译] 如何在 ASP.Net Core 中使用 Consul 来存储配置

    [翻译] 如何在 ASP.Net Core 中使用 Consul 来存储配置 原文: USING CONSUL FOR STORING THE CONFIGURATION IN ASP.NET COR ...

  6. (6)ASP.NET Core 中使用IHttpClientFactory发出HTTP请求

    1.HttpClient类使用存在的问题 HttpClient类的使用所存在的问题,百度搜索的文章一大堆,好多都是单纯文字描述,让人感觉不太好理解,为了更好理解HttpClient使用存在的问题,下面 ...

  7. ASP.NET Core中的Http缓存

    ASP.NET Core中的Http缓存 Http响应缓存可减少客户端或代理对web服务器发出的请求数.响应缓存还减少了web服务器生成响应所需的工作量.响应缓存由Http请求中的header控制. ...

  8. ASP.NET Core 中jwt授权认证的流程原理

    目录 1,快速实现授权验证 1.1 添加 JWT 服务配置 1.2 颁发 Token 1.3 添加 API访问 2,探究授权认证中间件 2.1 实现 Token 解析 2.2 实现校验认证 1,快速实 ...

  9. 如何在ASP.NET Core 中使用IHttpClientFactory

    利用IHttpClientFactory可以无缝创建HttpClient实例,避免手动管理它们的生命周期. 当使用ASP.Net Core开发应用程序时,可能经常需要通过HttpClient调用Web ...

随机推荐

  1. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十七):登录验证码实现(Captcha)

    登录验证码 登录验证是一般系统都会有的功能,验证的方式也多种多样,比如输入式验证码,拖动式验证条,拖动式验证拼图等等. 我们这里先实现常规的输入验证码的方式,右边显示验证码图片,点击可刷新,左边输入验 ...

  2. leetcode — generate-parentheses

    import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Source : https://o ...

  3. css3学习--select怎么去掉默认样式

    select { 2. /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/ 3. border: solid 1px #000; 4. /*很关键:将默认的select选择框样式 ...

  4. 技术人员在小公司成长 vs 大公司成长路径和建议

    我们经常听到这样的对话: 大公司猿A:真不想干了,每天都做类似的工作,学不到什么东西,会议也多,浪费不少时间,想去小公司多做些事情,多学些东西. 小公司猿B:累死了,什么都做,太乱太杂,没系统不规范, ...

  5. 比较两个DataTable是否相等

    ///   <summary>        ///   比较两个DataTable内容是否相等,先是比数量,数量相等就比内容         ///   </summary> ...

  6. 弱引用(WeakReference)

    在应用程序代码内实例化一个类或结构时,只要有代码引用它,就会形成强引用.这意味着垃圾回收器不会清理这样的对象使用的内存.但是如果当这个对象很大,并且不经常访问时,此时可以创建对象的弱引用,弱引用允许创 ...

  7. .NET JSON 转换 Error ” Self referencing loop detected for type“

    在进行实体转换为Json格式报错如下图: Self referencing loop detected for property 'md_agent' with type 'System.Data.E ...

  8. CLR,GC 表示什么意思?

    CLR常用简写词语,CLR是公共语言运行库(Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集等),并保证应用和底层操作系统之间 ...

  9. .net 服务端 访问共享文件夹

    共享文件夹所在电脑为A服务器,网站部署在B服务器 A,B服务器上拥有同名账户,且密码也要相同.如账户名share,密码123. A服务器上,共享文件夹设置share账户有读写权限 B服务器上,IIS中 ...

  10. 【Spring】1、Spring 中的监听器 Listener

    一.接口 1.EventListener 2.HttpSessionAttributeListener   继承EventListener接口 HttpSessionAttributeListener ...