Wednesday, April 27, 2016

MultipartFormDataContent Add Extension Method to Accept Custom Header Values

By default MultipartFormDataContent.Add method has three overloads.
  • Add(HttpContent content)
  • Add(HttpContent content, string name)
  • Add(HttpContent content, string name, string fileName)
In this post let’s see how we can add an extension method to MultipartFormDataContent to add a new overload method which will let us send additional parameters.
  • Add(HttpContent content, string name, string fileName, object headerValues)
This is our Extension Method.
public static void Add(this MultipartFormDataContent form, HttpContent content, string name, string fileName, object headerValues)
    var header = new ContentDispositionHeaderValue("form-data")
        Name = name,
        FileName = fileName
    var headerParameters = new HttpRouteValueDictionary(headerValues);
    foreach (var parameter in headerParameters)
        header.Parameters.Add(new NameValueHeaderValue(parameter.Key, parameter.Value.ToString()));
    content.Headers.ContentDisposition = header;
And this is how you can pass values.
using (var multipartFormDataContent = new MultipartFormDataContent("Upload----" + DateTime.Now.ToString(CultureInfo.InvariantCulture)))
    multipartFormDataContent.Add(new StreamContent(new MemoryStream(data)), name, fileName, new
This is how you can read the values.
MultipartMemoryStreamProvider provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
Func<ICollection<NameValueHeaderValue>, string, string> GetHeaderValueByKey = (headerValues, key) =>
   if (headerValues == null)
       return null;
   NameValueHeaderValue nameValueHeaderValue = headerValues.FirstOrDefault(x => x.Name.Equals(key, StringComparison.OrdinalIgnoreCase));
   return nameValueHeaderValue != null ? nameValueHeaderValue.Value : null;

HttpContent file = provider.Contents.FirstOrDefault();
string parameter1Value = GetHeaderValueByKey(file.Headers.ContentDisposition.Parameters, "Parameter1");

Happy Coding.