VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • C#教程之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)
    {
        //对信息进行处理
    }
}

相关教程