using System; using System.Collections.Generic; using System.Net.Http; using System.Text; using System.Threading.Tasks; namespace Step { public class FormItem { public string ParameterName { get; set; } public byte[] Data { get; set; } public string FileName { get; set; } public string MediaType { get; set; } public string Value { get { return Encoding.Default.GetString(Data); } } public bool IsAFile { get { return !string.IsNullOrEmpty(FileName); } } } public static class MultipartHandler { public static async Task> ManageMultiPartFileAsync(HttpRequestMessage Request) { var provider = new MultipartMemoryStreamProvider(); // Read multipart data await Request.Content.ReadAsMultipartAsync(provider); var formItems = new List(); // Scan the Multiple Parts foreach (HttpContent contentPart in provider.Contents) { // Populate list with form-data parameters var formItem = new FormItem(); var contentDisposition = contentPart.Headers.ContentDisposition; formItem.ParameterName = contentDisposition.Name.Trim('"'); formItem.Data = await contentPart.ReadAsByteArrayAsync(); formItem.FileName = String.IsNullOrEmpty(contentDisposition.FileName) ? "" : contentDisposition.FileName.Trim('"'); formItem.MediaType = contentPart.Headers.ContentType == null ? "" : String.IsNullOrEmpty(contentPart.Headers.ContentType.MediaType) ? "" : contentPart.Headers.ContentType.MediaType; formItems.Add(formItem); } return formItems; } } }