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