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的更多相关文章

  1. .Net多线程编程—System.Threading.Tasks.Parallel

    System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Parallel.For,Parallel.ForEach这三个静态方法. 1 Parallel. ...

  2. .Net Core MVC 网站开发(Ninesky) 2.2、栏目管理功能-System区域添加

    在asp或asp.net中为了方便网站的结构清晰,通常把具有类似功能的页面放到一个文件夹中,用户管理功能都放在Admin文件夹下,用户功能都放在Member文件夹下,在MVC中,通常使用区域(Area ...

  3. .Net Core上用于代替System.Drawing的类库

    目前.Net Core上没有System.Drawing这个类库,想要在.Net Core上处理图片得另辟蹊径. 微软给出了将来取代System.Drawing的方案,偏向于使用一个单独的服务端进行各 ...

  4. System.Guid ToString五中格式

    参考:https://msdn.microsoft.com/en-us/library/97af8hh4.aspx 测试代码: using System; using System.Collectio ...

  5. System进程(pid=4)占用80端口的解决方案

    问题 Mail服务器在安装TFS服务(含SQLServer2016)后启动不了网页服务. 排查问题 使用命令查看端口占用情况 netstat -nao | find ":80" n ...

  6. -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HO 解决办法

    最近在使用maven,项目测试的时候出现了这么一个错.-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2 ...

  7. .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数

    .Net中我们通常使用Random类生成随机数,在一些场景下,我却发现Random生成的随机数并不可靠,在下面的例子中我们通过循环随机生成10个随机数: ; i < ; i++) { Rando ...

  8. .net正则表达式大全(.net 的 System.Text.RegularExpressions.Regex.Match()方法使用)

    正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET的System.dll类库提供的System.Text.RegularExpression ...

  9. System.arraycopy()和Arrays.copyOf()的区别

    先看看System.arraycopy()的声明: public static native void arraycopy(Object src,int srcPos, Object dest, in ...

  10. 类型“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: ...

随机推荐

  1. VM 修改 virtualHW.version

    1.修改BT5R3-GNOME-VM-32.vmdk文件 将encoding="windows-1252"修改为encoding="GBK" 将ddb.virt ...

  2. 解决eclipse Blocked : the user operation is waiting

    本文转载自:http://blog.csdn.net/shaw1994/article/details/44106679 出现这种情况的时候整个adb都跪了, eclipse一run就会跪, 而且还容 ...

  3. MySQL简述

    Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一. ...

  4. 关于Bootstrap的整理和理解

    随着CSS3和HTML5的流行,我们的WEB页面不仅需要更人性化的设计理念,而且需要更酷的页面特效和用户体验.作为开发者,我们需要了解一些宝贵的CSS UI开源框架资源,它们可以帮助我们更快更好地实现 ...

  5. 「小程序JAVA实战」 小程序的事件(11)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-11/ 我们以前在web开发的时候,web页面也有一些相关的事件,当然小程序要接触屏幕要进行一些点击 ...

  6. CImage得到位图的大小

    CImage image; image.Load(_T("1.jpg")); //HBITMAP hBitmap=image.Detach(); HGLOBAL m_hMem = ...

  7. android 除法运算保留小数点

    java保留两位小数问题: 方式一: 四舍五入 double f = 111231.5585; BigDecimal b = new BigDecimal(f); double f1 = b.setS ...

  8. 【294】◀▶ Python 字符串说明

    目录: 一.Python访问字符串中的值 二. Python 转义字符 三.Python 字符串运算符 参考:Python 字符串 一.Python访问字符串中的值   Python不支持单字符类型, ...

  9. Java多线程-新特征-信号量Semaphore

    简介信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确.合理的使用公共资源. 概念Semaphore分为单值和多值两种,前者只能 ...

  10. sublime添加右键菜单

    参考:https://www.zhihu.com/question/29662273/answer/45277925 @echo Off :START CLS echo *============== ...