Creating Custom Media Format with ASP.NET Web API

By | May 24, 2018

We can create our own media formats in the ASP.NET Web API project

First of all, as root you create a folder called Formatters

And we create a class in this folder for the format we want to define(For example for csv format)

 

using System.Web.Http;
using System.Web.Mvc;
using Kartal.Formatters;

public class DemoItemCsvFormatter : BufferedMediaTypeFormatter
 {
  
  public DemoItemCsvFormatter()
  {
   SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/csv-demoitem"));
  }
  public override bool CanReadType(Type type)
  {
   return false;
  }

  public override bool CanWriteType(Type type)
  {
   return (type == typeof(DemoItem)) || type== (typeof(IEnumerable<DemoItem>));
  }

  public override void WriteToStream(Type type, object value, Stream writeStream, HttpContent content) 
  {
   using (var writer=new StreamWriter(writeStream))
   {
    writer.WriteLine("Id,Number,Text");

    var list = value as IEnumerable<DemoItem>;

   if (list != null)
   {
    foreach (var item in list)
    WriteDemoItem(item, writer);
   }
   else
   {
    var item = value as DemoItem;
    if (item == null)
      throw new InvalidOperationException("Type not supported");
    WriteDemoItem(item, writer);
   }
 }
}

 public void WriteDemoItem(DemoItem item,TextWriter writer)
 {
  writer.WriteLine($"{item.Id},{item.Number},{item.Text}");
 }
}

Then we add the following line to WebApi.config

 config.Formatters.Add(new DemoItemCsvFormatter());

Now we can make a request for the format we specify

Good luck

 

Leave a Reply

Your email address will not be published. Required fields are marked *