系列目錄???? 【已更新最新開(kāi)發(fā)文章,點(diǎn)擊查看詳細(xì)】
          <https://www.cnblogs.com/SavionZhang/p/11422481.html>

          使用multipart/form-data方式提交數(shù)據(jù)與普通的post方式有一定區(qū)別。multipart/form-data的請(qǐng)求頭必須包含一個(gè)特殊的頭信息:Content-Type,其值必須為multipart/form-data。另外還需要規(guī)定一個(gè)內(nèi)容分割符用于分割請(qǐng)求體中的多個(gè)post的內(nèi)容,如文件內(nèi)容和文本內(nèi)容,只有這樣服務(wù)端才能正常解析數(shù)據(jù)。但是,multipart/form-data的基礎(chǔ)還是post,它是由post方法來(lái)實(shí)現(xiàn)的。



          點(diǎn)擊【Code】按鈕,打開(kāi)如下窗體:



          可以看到?Content-Type: multipart/form-data;
          boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

          以及藍(lán)色框內(nèi)的用分隔符分割的請(qǐng)求體中的內(nèi)容。

          在某些應(yīng)用場(chǎng)景下,表單數(shù)據(jù)以鍵值對(duì)集合存儲(chǔ),然后將鍵值對(duì)集合上傳到遠(yuǎn)程服務(wù)器。

          通用方法如下:
          1 /// <summary> 2 /// HTTP請(qǐng)求(包含表單數(shù)據(jù)) 3 /// </summary> 4 /// <param
          name="url">請(qǐng)求目標(biāo)URL</param> 5 /// <param name="kvDatas">請(qǐng)求時(shí)表單鍵值對(duì)數(shù)據(jù)</param> 6
          /// <param name="method">請(qǐng)求的方法。請(qǐng)使用 WebRequestMethods.Http 的枚舉值</param> 7 ///
          <returns></returns> 8 public HttpResult UploadForm(string url,
          NameValueCollection kvDatas,string method = WebRequestMethods.Http.Post) 9 { 10
          HttpResult httpResult =new HttpResult(); 11 HttpWebRequest httpWebRequest =
          null; 12 13 try 14 { 15 httpWebRequest = WebRequest.Create(url) as
          HttpWebRequest;16 httpWebRequest.Method = method; 17 httpWebRequest.Headers =
          HeaderCollection;18 httpWebRequest.CookieContainer = CookieContainer; 19
          httpWebRequest.ContentType = HttpContentType.WWW_FORM_URLENCODED; 20
          httpWebRequest.UserAgent = _userAgent; 21 httpWebRequest.AllowAutoRedirect =
          _allowAutoRedirect;22 httpWebRequest.ServicePoint.Expect100Continue = false; 23
          24 if (kvDatas != null) 25 { 26 StringBuilder sbKV = new StringBuilder(); 27
          foreach (string key in kvDatas.Keys) 28 { 29 sbKV.AppendFormat("{0}={1}&",
          Uri.EscapeDataString(key), Uri.EscapeDataString(kvDatas[key]));//注意中文編碼 30 } 31
          32 httpWebRequest.AllowWriteStreamBuffering = true; 33 using (Stream
          requestStream = httpWebRequest.GetRequestStream()) 34 { 35
          requestStream.Write(EncodingType.GetBytes(sbKV.ToString()),0, sbKV.Length - 1);
          36 requestStream.Flush(); 37 } 38 } 39 40 HttpWebResponse httpWebResponse =
          httpWebRequest.GetResponse()as HttpWebResponse; 41 if (httpWebResponse != null)
          42 { 43 GetResponse(ref httpResult, httpWebResponse); 44
          httpWebResponse.Close();45 } 46 } 47 catch (WebException webException) 48 {
          49 GetWebExceptionResponse(ref httpResult, webException); 50 } 51 catch
          (Exception ex)52 { 53 GetExceptionResponse(ref httpResult, ex, method,
          HttpContentType.WWW_FORM_URLENCODED);54 } 55 finally 56 { 57 if
          (httpWebRequest !=null) 58 { 59 httpWebRequest.Abort(); 60 } 61 } 62 63
          return httpResult; 64 }
          1、向 NameValueCollection 類(lèi)中添加項(xiàng)時(shí),鍵可以重復(fù)。

          2、如果添加了C#中的某些關(guān)鍵字作為集合的鍵則會(huì)報(bào)錯(cuò),解決方法是,給關(guān)鍵字添加前綴或者后綴,在解析時(shí)再去除前綴或者后綴。





          借助于上述方法,又衍生出一個(gè)重載方法:
          1 /// <summary> 2 /// HTTP請(qǐng)求(包含表單數(shù)據(jù)) 3 /// </summary> 4 /// <param
          name="url">請(qǐng)求目標(biāo)URL</param> 5 /// <param name="kvDatas">請(qǐng)求時(shí)表單鍵值對(duì)數(shù)據(jù)</param> 6
          /// <param name="method">請(qǐng)求的方法。請(qǐng)使用 WebRequestMethods.Http 的枚舉值</param> 7 ///
          <returns></returns> 8 public HttpResult UploadForm(string url, Dictionary<
          string, string> kvDatas, string method = WebRequestMethods.Http.Post) 9 { 10
          var nvc = kvDatas.ToNameValueCollection(); 11 12 return UploadForm(url, nvc,
          method);13 }
          Dictionary 字典中不能添加重復(fù)的鍵。
          Dictionary 轉(zhuǎn)換成 NameValueCollection 集合的擴(kuò)展方法如下: 1 /// <summary> 2 ///
          自定義擴(kuò)展方法:將字典轉(zhuǎn)換為 NameValueCollection 集合對(duì)象 3 /// </summary> 4 /// <param
          name="dict">擴(kuò)展對(duì)象</param> 5 /// <returns></returns> 6 public static
          NameValueCollection ToNameValueCollection<TKey, TValue>(this IDictionary<TKey,
          TValue> dict) 7 { 8 if (dict == null) 9 { 10 return null; 11 } 12 13 var
          nameValueCollection =new NameValueCollection(); 14 15 foreach (var item in dict)
          16 { 17 string value = null; 18 if (item.Value != null) 19 { 20 value =
          item.Value.ToString();21 } 22 23 nameValueCollection.Add(item.Key.ToString(),
          value);24 } 25 26 return nameValueCollection; 27 }
          ?
          系列目錄???? 【已更新最新開(kāi)發(fā)文章,點(diǎn)擊查看詳細(xì)】
          <https://www.cnblogs.com/SavionZhang/p/11422481.html>

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點(diǎn)信息
          問(wèn)題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                男男裸体按摩 | 伸进胸罩揉捏丰满白嫩的双乳小说 | 999av | 男女在线观看 | 我把她下药做得好爽 |