国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP.NET教程 - 詳解c# .net core 下的網(wǎng)絡(luò)請求

詳解c# .net core 下的網(wǎng)絡(luò)請求

2020-05-05 15:49SZMD.ls.nct ASP.NET教程

本篇文章主要介紹了詳解c# .net core 下的網(wǎng)絡(luò)請求,大致介紹下在.net core 下如何進行http請求,主要仍然是GET和POST方法,有興趣的可以了解下

本文章是在VS2017的環(huán)境下,.net core 1.1版本以上。

在這期間,由于.net core 并不基于IIS,我們的過去的網(wǎng)絡(luò)請求代碼在.net core框架下,有可能會出現(xiàn)不兼容,報錯的現(xiàn)象。這里大致介紹下在.net core 下如何進行http請求,主要仍然是GET和POST方法,有錯誤的地方,歡迎指正!

先來說POST,POST我實現(xiàn)了三種方法,前兩種基于的原理是完全一致的,后面的有些小小的差異,但他們的本質(zhì)都是http請求,本質(zhì)上是無區(qū)別的,只是實現(xiàn)方法有所不同。

廢話不多說,上代碼:

POST異步方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/// <summary>
   /// 異步請求post(鍵值對形式,可等待的)
   /// </summary>
   /// <param name="uri">網(wǎng)絡(luò)基址("http://localhost:59315")</param>
   /// <param name="url">網(wǎng)絡(luò)的地址("/api/UMeng")</param>
   /// <param name="formData">鍵值對List<KeyValuePair<string, string>> formData = new List<KeyValuePair<string, string>>();formData.Add(new KeyValuePair<string, string>("userid", "29122"));formData.Add(new KeyValuePair<string, string>("umengids", "29122"));</param>
   /// <param name="charset">編碼格式</param>
   /// <param name="mediaType">頭媒體類型</param>
   /// <returns></returns>
   public async Task<string> HttpPostAsync(string uri, string url, List<KeyValuePair<string, string>> formData = null, string charset = "UTF-8", string mediaType = "application/x-www-form-urlencoded")
   {
     
     string tokenUri = url;
     var client = new HttpClient();
     client.BaseAddress = new Uri(uri);
     HttpContent content = new FormUrlEncodedContent(formData);
     content.Headers.ContentType = new MediaTypeHeaderValue(mediaType);
     content.Headers.ContentType.CharSet = charset;
     for (int i = 0; i < formData.Count; i++)
     {
       content.Headers.Add(formData[i].Key, formData[i].Value);
     }
     
     HttpResponseMessage resp = await client.PostAsync(tokenUri, content);
     resp.EnsureSuccessStatusCode();
     string token = await resp.Content.ReadAsStringAsync();
     return token;
   }

POST同步方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/// <summary>
    /// 同步請求post(鍵值對形式)
    /// </summary>
    /// <param name="uri">網(wǎng)絡(luò)基址("http://localhost:59315")</param>
    /// <param name="url">網(wǎng)絡(luò)的地址("/api/UMeng")</param>
    /// <param name="formData">鍵值對List<KeyValuePair<string, string>> formData = new List<KeyValuePair<string, string>>();formData.Add(new KeyValuePair<string, string>("userid", "29122"));formData.Add(new KeyValuePair<string, string>("umengids", "29122"));</param>
    /// <param name="charset">編碼格式</param>
    /// <param name="mediaType">頭媒體類型</param>
    /// <returns></returns>
    public string HttpPost(string uri, string url, List<KeyValuePair<string, string>> formData = null, string charset = "UTF-8", string mediaType = "application/x-www-form-urlencoded")
    {     
      string tokenUri = url;
      var client = new HttpClient();
      client.BaseAddress = new Uri(uri);
      HttpContent content = new FormUrlEncodedContent(formData);
      content.Headers.ContentType = new MediaTypeHeaderValue(mediaType);
      content.Headers.ContentType.CharSet = charset;
      for (int i = 0; i < formData.Count; i++)
      {
        content.Headers.Add(formData[i].Key, formData[i].Value);
      }
 
      var res = client.PostAsync(tokenUri, content);
      res.Wait();
      HttpResponseMessage resp = res.Result;
      
      var res2 = resp.Content.ReadAsStringAsync();
      res2.Wait();
 
      string token = res2.Result;
      return token;
    }

遺憾的是,同步方法也是基于異步實現(xiàn)的,個人認為這樣做會加大系統(tǒng)開銷。如果各位有其他的高效實現(xiàn),請不吝賜教!

接下來是通過流的方式進行POST:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public string Post(string url, string data, Encoding encoding, int type)
    {
      try
      {
        HttpWebRequest req = WebRequest.CreateHttp(new Uri(url));
        if (type == 1)
        {
          req.ContentType = "application/json;charset=utf-8";
        }
        else if (type == 2)
        {
          req.ContentType = "application/xml;charset=utf-8";
        }
        else
        {
          req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
        }
 
        req.Method = "POST";
        //req.Accept = "text/xml,text/javascript";
        req.ContinueTimeout = 60000;
 
        byte[] postData = encoding.GetBytes(data);
        Stream reqStream = req.GetRequestStreamAsync().Result;
        reqStream.Write(postData, 0, postData.Length);
        reqStream.Dispose();
 
        var rsp = (HttpWebResponse)req.GetResponseAsync().Result;
        var result = GetResponseAsString(rsp, encoding);
        return result;
        
      }
      catch (Exception ex)
      {
        throw;
      }
    }
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)
    {
      Stream stream = null;
      StreamReader reader = null;
 
      try
      {
        // 以字符流的方式讀取HTTP響應(yīng)
        stream = rsp.GetResponseStream();
        reader = new StreamReader(stream, encoding);
        return reader.ReadToEnd();
      }
      finally
      {
        // 釋放資源
        if (reader != null) reader.Dispose();
        if (stream != null) stream.Dispose();
        if (rsp != null) rsp.Dispose();
      }
    }

這種方式的POST還是將數(shù)據(jù)寫入到流里面,進行POST,之所以寫前兩個key-value的形式,是為了符合java或者oc的風(fēng)格,在c#書寫的webapi中,由于接收形式是{=value}而不是{key=value}(由webapi的性質(zhì)決定),后續(xù)我會說如何在webapi中接收(key-value)的形式,適當(dāng)避免.net后臺人員與android和ios的矛盾,從而達到社會主義民主社會的長治久安。

接下來是get,同樣同步異步都是由異步實現(xiàn)的,還請各位看官輕噴。

GET:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/// <summary>
   /// 異步請求get(UTF-8)
   /// </summary>
   /// <param name="url">鏈接地址</param>   
   /// <param name="formData">寫在header中的內(nèi)容</param>
   /// <returns></returns>
   public static async Task<string> HttpGetAsync(string url, List<KeyValuePair<string, string>> formData = null)
   {
     HttpClient httpClient = new HttpClient();
     HttpContent content = new FormUrlEncodedContent(formData);
     if (formData != null)
     {
       content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
       content.Headers.ContentType.CharSet = "UTF-8";
       for (int i = 0; i < formData.Count; i++)
       {
         content.Headers.Add(formData[i].Key, formData[i].Value);
       }
     }
     var request = new HttpRequestMessage()
     {
       RequestUri = new Uri(url),
       Method = HttpMethod.Get,
     };
     for (int i = 0; i < formData.Count; i++)
     {
       request.Headers.Add(formData[i].Key, formData[i].Value);
     }
     var resp = await httpClient.SendAsync(request);
     resp.EnsureSuccessStatusCode();
     string token = await resp.Content.ReadAsStringAsync();
 
     return token;
   }
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/// <summary>
   /// 同步get請求
   /// </summary>
   /// <param name="url">鏈接地址</param>   
   /// <param name="formData">寫在header中的鍵值對</param>
   /// <returns></returns>
   public string HttpGet(string url, List<KeyValuePair<string, string>> formData = null)
   {
     HttpClient httpClient = new HttpClient();
     HttpContent content = new FormUrlEncodedContent(formData);
     if (formData != null)
     {
       content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
       content.Headers.ContentType.CharSet = "UTF-8";
       for (int i = 0; i < formData.Count; i++)
       {
         content.Headers.Add(formData[i].Key, formData[i].Value);
       }
     }
     var request = new HttpRequestMessage()
     {
       RequestUri = new Uri(url),
       Method = HttpMethod.Get,
     };
     for (int i = 0; i < formData.Count; i++)
     {
       request.Headers.Add(formData[i].Key, formData[i].Value);
     }
     var res = httpClient.SendAsync(request);
     res.Wait();
     var resp = res.Result;
     Task<string> temp = resp.Content.ReadAsStringAsync();
     temp.Wait();
     return temp.Result;
   }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://www.cnblogs.com/lsnct/p/6890748.html?utm_source=tuicool&utm_medium=referral

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 97久久精品午夜一区二区 | 日韩美女在线 | jizz中国zz女人18高潮 | a国产精品| 欧美日韩一区二区电影 | 日韩精品一区二区三区在线播放 | 国产日韩精品一区 | 欧美亚洲国产一区二区三区 | 久久伊人色 | 久久精品久久久 | 成人精品视频免费 | 欧美国产综合 | 特黄特色大片在线观看视频网站 | 欧美setu | 国产福利在线视频 | 日韩综合在线 | 成人aaa | 免费观看日本视频 | 亚洲免费在线视频 | 欧美激情精品久久久久久 | 成人小视频在线看 | 欧美一级精品 | av一区二区三区四区 | 久久国产成人 | 国产精品久久久久久久一区探花 | 日韩高清在线 | 日本在线视频一区 | 国产精品videosex极品 | 久久久精品综合 | 日日干夜夜操 | 一级毛片免费一级 | 精品在线一区二区三区 | 免费成人在线观看 | 午夜午夜精品一区二区三区文 | 伊人久久乐| av国产精品 | 亚洲影视一区 | 欧美大片免费高清观看 | 日韩av成人| 久久久亚洲 | 一区二区电影 |