public void CreateMultipartRequest(WebRequest request)
{
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x", CultureInfo.InvariantCulture);
request.ContentType = "multipart/form-data; boundary=" + boundary;
byte[] byteContent;
using (var memoryStream = new MemoryStream())
{
foreach (var item in _formData)
{
string header = String.Format(CultureInfo.InvariantCulture, FormDataTemplate, boundary, item.Key, item.Value);
byte[] headerBytes = Encoding.UTF8.GetBytes(header);
memoryStream.Write(headerBytes, 0, headerBytes.Length);
}
byte[] newlineBytes = Encoding.UTF8.GetBytes("\r\n");
foreach (var file in _files)
{
string header = String.Format(CultureInfo.InvariantCulture, FileTemplate, boundary, file.FieldName, file.FieldName, file.ContentType);
byte[] headerBytes = Encoding.UTF8.GetBytes(header);
memoryStream.Write(headerBytes, 0, headerBytes.Length);
using (Stream fileStream = file.FileFactory())
{
fileStream.CopyTo(memoryStream);
}
memoryStream.Write(newlineBytes, 0, newlineBytes.Length);
}
string trailer = String.Format(CultureInfo.InvariantCulture, "--{0}--", boundary);
byte[] trailerBytes = Encoding.UTF8.GetBytes(trailer);
memoryStream.Write(trailerBytes, 0, trailerBytes.Length);
byteContent = memoryStream.ToArray();
}
request.ContentLength = byteContent.Length;
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(byteContent, 0, (int)byteContent.Length);
}
}