.Net Standard HttpClient封装Htt请求常用操作整理
一、常用Http操作
1.Get请求,有参数,无参数
2.Post 请求,有参数,无参数
3.文件简单下载
修改NetHelper中Post请求方法Bug:请求编码默认UTF8,字符串内存流读取后这是到开始位置。
/// <summary>
/// Post 请求,无参(注:默认使用UTF8编码)
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static async Task<string> PostAsync(string url, string content = "")
{
HttpClient client = new HttpClient();
using (MemoryStream ms = new MemoryStream())
{
byte[] bytes = Encoding.UTF8.GetBytes(content);
ms.Write(bytes, , bytes.Length);
ms.Seek(, SeekOrigin.Begin);//设置指针读取位置,否则发送无效
HttpContent hc = new StreamContent(ms);
HttpResponseMessage resp = await client.PostAsync(url, hc);
return await resp.Content.ReadAsStringAsync();
}
}
以前代码:
/// <summary>
/// http协议请求方法封装
/// </summary>
public class NetHelper
{
#region Get请求
/// <summary>
/// get请求,无参
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static async Task<string> GetAsync(string url)
{
HttpClient client = new HttpClient();
HttpResponseMessage resp = await client.GetAsync(url);
//获取响应状态
//respMsg.StatusCode==200请求成功
//获取请求内容
HttpContent respContent = resp.Content;
return await respContent.ReadAsStringAsync();
}
/// <summary>
/// Get 请求,指定参数
/// </summary>
/// <param name="url"></param>
/// <param name="dic"></param>
/// <returns></returns>
public static async Task<string> GetAsync(string url, Dictionary<string, string> dic)
{
//参数处理
StringBuilder builder = new StringBuilder();
builder.Append(url);
if (dic.Count > )
{
builder.Append("?");
int i = ;
foreach (var item in dic)
{
if (i > )
builder.Append("&");
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
}
return await GetAsync(builder.ToString());
} /// <summary>
/// get 请求 -同步处理
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string Get(string url)
{
Task<string> result = GetAsync(url);
result.Wait();
return result.Result;
}
/// <summary>
/// Get请求-同步处理
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="dic">请求参数</param>
/// <returns></returns>
public static string Get(string url, Dictionary<string, string> dic)
{
//参数处理
StringBuilder builder = new StringBuilder();
builder.Append(url);
if (dic.Count > )
{
builder.Append("?");
int i = ;
foreach (var item in dic)
{
if (i > )
builder.Append("&");
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
}
return Get(builder.ToString());
}
#endregion #region Post 请求处理
/// <summary>
/// Post 请求,无参
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static async Task<string> PostAsync(string url, string content = "")
{
HttpClient client = new HttpClient();
using (MemoryStream ms = new MemoryStream())
{
byte[] bytes = Encoding.Unicode.GetBytes(content);
ms.Write(bytes, , bytes.Length);
HttpContent hc = new StreamContent(ms);
HttpResponseMessage resp = await client.PostAsync(url, null);
return await resp.Content.ReadAsStringAsync();
}
}
/// <summary>
/// Post 请求,处理参数
/// </summary>
/// <param name="url"></param>
/// <param name="dic"></param>
/// <returns></returns>
public static async Task<string> PostAsync(string url, Dictionary<string, string> dic)
{
HttpClient client = new HttpClient();
FormUrlEncodedContent data = new FormUrlEncodedContent(dic);
var r = await client.PostAsync(url, data);
return await r.Content.ReadAsStringAsync();
//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");
} /// <summary>
/// Post请求,同步,无参
/// </summary>
/// <param name="url"></param>
/// <param name="content"></param>
/// <returns></returns>
public static string Post(string url, string content = "")
{
Task<string> str = PostAsync(url, content);
str.Wait();
return str.Result;
}
/// <summary>
/// Post 请求,同步,参数处理
/// </summary>
/// <param name="url"></param>
/// <param name="dic"></param>
/// <returns></returns>
public static string Post(string url, Dictionary<string, string> dic)
{
Task<string> str = PostAsync(url, dic);
str.Wait();
return str.Result;
}
#endregion #region 下载文件处理
/// <summary>
/// 下载文件
/// </summary>
/// <param name="url">链接地址</param>
/// <param name="target">存储地址</param>
/// <returns></returns>
public static bool DownLoad(string url, string target)
{
try
{
HttpClient client = new HttpClient();
var t = client.GetByteArrayAsync(url);
t.Wait(); var bytes = t.Result;
using (FileStream fs = new FileStream(target, FileMode.Create))
{
fs.Write(bytes, , bytes.Length);
fs.Close();
}
return true;
}
catch (Exception ex)
{
throw new Exception("下载文件失败,", ex);
}
}
#endregion
}
更多:
.Net Standard HttpClient封装Htt请求常用操作整理的更多相关文章
- javascript中字符串常用操作整理
javascript中字符串常用操作整理 字符串的操作在js中非常频繁,也非常重要.以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊...今天就对字符串的一些常用 ...
- vim程序编辑器---常用操作整理
vim程序编辑器---常用操作整理 移动光标方法 o 在光标行的下一行,进入编辑模式 $ 移动到光标这行,最末尾的地方 G(大写) 移动到文件最末行 :set nu 文件显示行数 :set non ...
- vim编辑器——常用操作整理
注意:以下的操作都是在命令状态下进行的,不要进入插入状态了.参考这里 1.删除 dd 删除一行 ndd 删除以当前行开始的n行dw 删除以当前字符开始的一个字符ndw 删除 ...
- Mysql数据库常用操作整理
0.说明 MySQL数据库是一个十分轻便的数据库管理系统,相比大型的数据库管理系统如Oracle,MySQL更拥有轻便.灵活.开发速度快的特色,更适用于中小型数据的存储与架构,被数以万计的网站采用.从 ...
- vim用户手册笔记常用操作整理
"x"命令可以删除一个字符 "d"命令可以后跟任何一个位移命令,它将删除从当前光标起到位移的终点处的文本内容dw "c",改变命令例如cw ...
- vim常用操作整理
一.删除操作 :%s/r//g 删除DOS方式的回车^M :%s= *$== 删除行尾空白 :%s/^(.*)n1/1$/ 删除重复行 :%s/^.pdf/new.pdf/ 只是删除第一个pdf :% ...
- MongoDB常用操作整理
Mongodb:是一种NoSQL数据库,NoSQL:Not Only SQLSQL: 数据表->JDBC读取->POJO(VO.PO)->控制层转化为JSON数据->客户端 这 ...
- PphpStorm常用操作整理
本地修改记录:在项目名称上右键,点击Local History | Show History.你可以看到项目文件各个历史版本:Alt+Shift+C,可以看到项目最近的修改.这就是它的版本集成功能特性 ...
- Javascript 字符串(二)常用操作整理
一.js获取字符串的字节数 这个好使--- function getBytesLength(str) { // 在GBK编码里,除了ASCII字符,其它都占两个字符宽 return str.repla ...
随机推荐
- php时间戳与日期转换
日期转换为时间戳 PHP 提供了函数可以方便的将各种形式的日期转换为时间戳,该类函数主要是: strtotime():将任何英文文本的日期时间描述解析为时间戳. mktime():从日期取得时间戳. ...
- Javascript之BOM与DOM讲解
一.Javascript组成 JavaScript的实现包括以下3个部分: ECMAScript(核心) 描述了JS的语法和基本对象. 文档对象模型 (DOM) 处理网页内容的方法和接口 浏览器对象模 ...
- Vue源码
参考文章:http://hcysun.me/2017/03/03/Vue%E6%BA%90%E7%A0%81%E5%AD%A6%E4%B9%A0/?utm_source=qq&utm_medi ...
- OCM_第七天课程:Section3 —》数据库可用性
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...
- ubuntu预装的是vim tiny版本
可以安装vim full版本,在full版本下键盘正常,安装好后同样使用vi命令.安装vim: ubuntu预装的是vim tiny版本,而需要的是vim full版本.执安装vim full版本:$ ...
- python 全栈开发,Day26(hashlib文件一致性,configparser,logging,collections模块,deque,OrderedDict)
一.hashlib文件一致性校验 为何要进行文件一致性校验? 为了确保你得到的文件是正确的版本,而没有被注入病毒和木马程序.例如我们经常在网上下载软件,而这些软件已经被注入了一些广告和病毒等,如果不进 ...
- ADO.NET的五大对象【转】
ADO.NET是一组用于和数据源进行交换的面向对象类库.通常情况下,数据源是数据库,也可以是文本文件.Excel表或XML文件.ADO.NET的主要类对象有Connection.Command.Dat ...
- WebApi的调用-3.Basic验证
webapi里的特性 /// <summary> /// Basic验证 /// </summary> /// <remarks> /// /// </rem ...
- oracle中tables和views的区别
tables存储的行和列的数据,可以做任何操作 views存储的是算法,是虚拟的数据
- iOS企业版应用发布(部分低版本系统)无法安装到最新版app的问题-缓存导致
通过自己网站发布企业版app时,经过测试发现在部分已安装过旧版app的低版本ios手机存在这样的问题 :扫码覆盖安装新版app,安装到的仍然是就版本的app.这样就导致部分用户一直无法更新到最新版本. ...