System.Net.Http
System.Net.Http
DotNet菜园
占个位置-
2018-11-10 09:55:00修改
这个HttpClient的学习笔记一直迟迟未记录,只引用了其他博主的博客链接占个位置,但被浏览量(138,另外一篇System.Speech使用浏览130)竟然是我截止2018-11-10时最多的,这让咱情何以堪。
在项目中还是有蛮多需要用到云服务的,比如调用百度翻译API,云报警等功能中都会用到,实现这部分功能并不困难,但是要写的整洁漂亮还是要花点心思的。咱是一个代码整洁追求者,发现Go语言对这方面很有追求,咱也很喜欢这门语言,目前也在学习当中。呀,扯远了,还是说说一些在C#中如何使用HttpClient吧。
HttpClient提供了Get和Post的操作,这两个操作应该是能满足我们99%的应用场景了。都提供了异步执行。会将这部分的使用根据应用场景进行封装,让自己使用的得心应手,手到擒来,岂不美哉。以下是开始封装的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
namespace WindowsFormsApp1
{
public static class StCloud
{
private static string Url => "http://www.baidu.com/";
private static HttpClient httpClient;
static StCloud()
{
HttpClientHandler httpClientHandler = new HttpClientHandler();
httpClientHandler.UseCookies = true;
httpClient = new HttpClient(httpClientHandler);
}
public static string Get(string api)
{
string url = $"{Url}{api}";
return httpClient.GetStringAsync(url).Result;
}
public static string Post(string api, Dictionary<string, string> dict)
{
string url = $"{Url}{api}";
FormUrlEncodedContent formUrlEncodedContent = new FormUrlEncodedContent(dict);
return httpClient.PostAsync(url, formUrlEncodedContent).Result.Content.ReadAsStringAsync().Result;
}
public static string Post(string api, string txt)
{
string url = $"{Url}{api}";
StringContent stringContent = new StringContent(txt);
return httpClient.PostAsync(url, stringContent).Result.Content.ReadAsStringAsync().Result;
}
}
}
我习惯于将各个功能写一个函数来条用,例如基本的登录:
public static string Login(Dictionary<string, string> dict)
{
string api = "login";
string result = Post(api, dict);
return result;
}
但我还会进一步处理登录时返回的信息。
public static LoginResult Login(Dictionary<string, string> dict)
{
string api = "login";
string result = Post(api, dict);
LoginResult loginResult = new LoginResult(result);
return loginResult;
}
public class ResultBase
{
public string ErrorCode { get; set; }
public string Msg { get; set; }
}
public class LoginResult : ResultBase
{
public bool Successed { get; set; }
public LoginResult(string content)
{
//对信息进行处理
}
}
System.Net.Http的更多相关文章
- .Net多线程编程—System.Threading.Tasks.Parallel
System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Parallel.For,Parallel.ForEach这三个静态方法. 1 Parallel. ...
- .Net Core MVC 网站开发(Ninesky) 2.2、栏目管理功能-System区域添加
在asp或asp.net中为了方便网站的结构清晰,通常把具有类似功能的页面放到一个文件夹中,用户管理功能都放在Admin文件夹下,用户功能都放在Member文件夹下,在MVC中,通常使用区域(Area ...
- .Net Core上用于代替System.Drawing的类库
目前.Net Core上没有System.Drawing这个类库,想要在.Net Core上处理图片得另辟蹊径. 微软给出了将来取代System.Drawing的方案,偏向于使用一个单独的服务端进行各 ...
- System.Guid ToString五中格式
参考:https://msdn.microsoft.com/en-us/library/97af8hh4.aspx 测试代码: using System; using System.Collectio ...
- System进程(pid=4)占用80端口的解决方案
问题 Mail服务器在安装TFS服务(含SQLServer2016)后启动不了网页服务. 排查问题 使用命令查看端口占用情况 netstat -nao | find ":80" n ...
- -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HO 解决办法
最近在使用maven,项目测试的时候出现了这么一个错.-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2 ...
- .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数
.Net中我们通常使用Random类生成随机数,在一些场景下,我却发现Random生成的随机数并不可靠,在下面的例子中我们通过循环随机生成10个随机数: ; i < ; i++) { Rando ...
- .net正则表达式大全(.net 的 System.Text.RegularExpressions.Regex.Match()方法使用)
正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET的System.dll类库提供的System.Text.RegularExpression ...
- System.arraycopy()和Arrays.copyOf()的区别
先看看System.arraycopy()的声明: public static native void arraycopy(Object src,int srcPos, Object dest, in ...
- 类型“System.Data.Linq.DataContext”在未被引用的程序集中定义。必须添加对程序集“System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”的引用。
解决方法:添加System.Data.Linq.dll引用 http://www.cnblogs.com/m84641693/archive/2010/07/26/1785100.html http: ...
随机推荐
- 阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
此教程中使用的相关IP等设置,在你的环境中要做相应修改. 使用之前更新apt-get,因为服务器基本上是一个裸系统 apt-get update;apt-get upgrade; 1 我们使用root ...
- 解决sever 2008中tomcat的报错 init Failed to initialize end point associated with ProtocolHandler ["http-nio-80"]
错误现象: 01-Aug-2017 14:59:50.140 信息 [main] org.apache.coyote.AbstractProtocol.init Initializing Protoc ...
- python's seventh day for me set
数据类型的补充: 对于元祖: 如果只有一个元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型. tu = ('顾清秋') tul = ('顾清秋',) print(type(tu)) ...
- MFC 菜单栏杂记
1.关于为毛要使用detach()函数 CMenu menu; menu.LoadMenu(IDR_MAINFRAME); SetMenu(&menu); menu.Detach(); //如 ...
- Bokeh绘图
http://bokeh.pydata.org/en/latest Bokeh 是一个专门针对Web浏览器的呈现功能的交互式可视化Python库.这是Bokeh与其它可视化库最核心的区别. 专门针对 ...
- 相关不同Linux系统的性能监控命令整理
Linux系统 查看系统版本情况: $uname -a 监控进程的CPU,MEM使用情况: $ps –aux 过滤方式命令:$ ps -aux|awk '{print $3,$4,$11}'|sort ...
- 切面(Aspect)获取请求参数和返回值
@Before("webLog()") public void doBefore(JoinPoint joinPoint) throws Throwable { // 接收到请求, ...
- Java虚拟机(二):垃圾回收算法
一.介绍 GC(Garbage Collection),垃圾收集 Java中,GC的对象是堆空间和永久区 二.GC算法 1. 引用计数法 老牌垃圾回收算法 通过引用计算来回收垃圾 Java中未使用,使 ...
- HashMap和HashSet的相同点和不同点
Map集合,就是有一对属性值的集合,属性包含key,和value.关键字key是唯一不重复的.Map是一个有序的集合,所以查询起来速度很快.而HashSet就像是把HashMap中value去掉,说白 ...
- Linux GCC编译警告:Clock skew detected. 错误解决办法
今天在虚拟机上用GCC编译一个程序的时候,出现了下面的错误: make: warning: Clock skew detected. Your build may be incomplete 试了ma ...