Advertisement
Guest User

Multipart Form Data Request

a guest
Oct 30th, 2013
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.55 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8.  
  9.  
  10. class MultipartFormDataRequest
  11. {
  12.     private List<MultipartRequestParams> reqContents = new List<MultipartRequestParams>();
  13.  
  14.     public enum MultipartRequestParamsTypes
  15.     {
  16.         MultipartFormData,
  17.         MultipartFileData
  18.     };
  19.  
  20.     class MultipartRequestParams
  21.     {
  22.  
  23.         public MultipartRequestParamsTypes formType
  24.         {
  25.             get;
  26.             set;
  27.         }
  28.         public string formName
  29.         {
  30.             get;
  31.             set;
  32.         }
  33.         public string formValue
  34.         {
  35.             get;
  36.             set;
  37.         }
  38.         public string formFile
  39.         {
  40.             get;
  41.             set;
  42.         }
  43.  
  44.         public MultipartRequestParams(string name, string value, MultipartRequestParamsTypes formType = MultipartRequestParamsTypes.MultipartFormData)
  45.         {
  46.             this.formType = formType;
  47.             this.formName = name;
  48.             if (formType == MultipartRequestParamsTypes.MultipartFormData)
  49.                 this.formValue = value;
  50.             else
  51.                 this.formFile = value;
  52.         }
  53.  
  54.     };
  55.     public void Clear()
  56.     {
  57.         reqContents.Clear();
  58.     }
  59.  
  60.     public void AddParam(string name, string value, MultipartRequestParamsTypes formType = MultipartRequestParamsTypes.MultipartFormData)
  61.     {
  62.         reqContents.Add(new MultipartRequestParams(name, value, formType));
  63.     }
  64.  
  65.     public string Send(string url)
  66.     {
  67.         var wreq = HttpWebRequest.Create(url) as HttpWebRequest;
  68.         wreq.Method = WebRequestMethods.Http.Post;
  69.         string boundary = "----WebKitFormBoundary" + Guid.NewGuid();
  70.         wreq.ContentType = "multipart/form-data; boundary=" + boundary;
  71.         using (var reqStream = wreq.GetRequestStream())
  72.         {
  73.             byte[] bNewBoundaryLine = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
  74.             foreach (var item in reqContents)
  75.             {
  76.                 if (item.formType == MultipartRequestParamsTypes.MultipartFormData)
  77.                 {
  78.                     reqStream.Write(bNewBoundaryLine, 0, bNewBoundaryLine.Length);
  79.                     byte[] bFormName = Encoding.UTF8.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"\r\n\r\n", item.formName));
  80.                     reqStream.Write(bFormName, 0, bFormName.Length);
  81.                     byte[] bFormValue = Encoding.UTF8.GetBytes(string.Format("{0}", item.formValue));
  82.                     reqStream.Write(bFormValue, 0, bFormValue.Length);
  83.                 }
  84.                 else
  85.                 {
  86.                     reqStream.Write(bNewBoundaryLine, 0, bNewBoundaryLine.Length);
  87.                     byte[] bFormName = Encoding.UTF8.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-type: application/exe\r\n\r\n", item.formName, item.formFile));
  88.                     reqStream.Write(bFormName, 0, bFormName.Length);
  89.                     byte[] bFormValue = File.ReadAllBytes(item.formFile);
  90.                     reqStream.Write(bFormValue, 0, bFormValue.Length);
  91.                 }
  92.             }
  93.  
  94.             byte[] bClosingboundaryLine = Encoding.UTF8.GetBytes("--" + boundary + "--");
  95.             reqStream.Write(bClosingboundaryLine, 0, bClosingboundaryLine.Length);
  96.  
  97.             using (var resReader = new StreamReader(wreq.GetResponse().GetResponseStream()))
  98.                 return resReader.ReadToEnd();
  99.         }
  100.     }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement