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. monkey实战--测试步骤、常用参数、常规monkey命令

    简要步骤:adb devices---了解包名--adb shell monkey -p 包名 -v 运行次数(多个参数的组合形成不同的用例以求最大的覆盖)--当崩溃或无响应时分析monkey日志 常 ...

  2. 分布式缓存系统 Memcached 主线程之main函数

    前两节中对工作线程的工作流程做了较为详细的分析,现把其主要流程总结为下图: 接下来本节主要分析主线程相关的函数设计,主函数main的基本流程如下图所示: 对于主线程中的工作线程的初始化到启动所有的工作 ...

  3. 融云rongCloud聊天室的使用

    融云提供了两种途径的接口, 一个是app端,一个是服务器端的. app端 1.连接融云,监听消息 rong = api.require('rongCloud2'); rong.init(functio ...

  4. Angular-cli新建项目目录结构详解

    Angular-cli新建项目目录结构详解 在上一篇博客中我们已经通过Angular CLI命令行工具创建出来一个全新的Angular项目,要想写项目,首先我们要先搞清楚项目的目录结构是怎样的,每个文 ...

  5. [C#] 等待启动的进程执行完毕

    有能有时候我们启动了一个进程,必须等到此进程执行完毕,或是,一段时间, 关闭进程后再继续往下走. Example sample1 等待应用程序执行完毕 //等待应用程序执行完毕 private voi ...

  6. Bypassing iPhone Code Signatures

    [Bypassing iPhone Code Signatures] Starting with the recent beta releases of the iPhoneOS, Apple has ...

  7. codeforce 462DIV2 C题

    题意 给出一个只含有1和2的序列,有n个元素,可以选择一段区间进行翻转操作,求再反转后的最大非递减子序列的长度 分析 太菜了只想出了N^2的做法.序列只有1和2,那么每个非递减子序列都会有一个分界点, ...

  8. codeforce452DIV2——E. Segments Removal

    题目 Vasya has an array of integers of length n. Vasya performs the following operations on the array: ...

  9. vectors 使用应该注意到的问题

    ector1. vector的元素必须具备 assignable和 copyable . 2.vector的迭代器是随机存取迭代器. 3.要考虑到vector的大小(size)和容量(capacity ...

  10. c语言实践 打印数字三角形

    效果如下图: 思路就是外层循环控制要打印的行数,里层循环控制每行打印的数字个数. int val = 65; for (int i = 0; i < 6; i++) { for (int j = ...