Merhabalar ,

Media Type Formatter verimizi kullanıcılara hangi formatta sunacağımızı belirleyeceğimiz sanal bir sınıftır , yani bütün media typpe formatırlar bu sanal sınıftan miras alarak türemiştir

  • JsonMediaTypeFormatter
  • XmlMediaTypeFormatter
  • FormUrlEncodeMediaTypeFormatter

Default olarak Asp.Net Web Api de gelmektedir , istersek kendimizde yeni bir Media Type Formatter tanımlayabiliriz.

Örneğin Api mizde xml desteğini kaldırmak istesek App_Start kalsöründe bulunan WebApiConfig.cs dosyamızda aşşağıdaki kod satısını eklemeliyiz.

using : using System.Net.Http.Formatting;

code : config.Formatters.Remove(config.Formatters.XmlFormatter);

Web apimize text/html tipinde bir accept istek olduğunda json formatında response dönmesi için config ayarı ekleme.

config satırımız : config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue(“text/html”));

json formatımızın desteklediği media type header değerlerine text/html eklemiş olduk

fakat bu şekilde bir kullanımda text/html olarak gelen bir accept te response olarak json döncektir ama header bilgisinin content-type kısmı application/json olması gerekirken text/html yazacaktır.

screenshot_8

 

Bunun önüne geçmek için kendi MediaTypeFormatter ımız yazıp config ayarlarırında tanımlayacağız.

Öncelikle projemize MyJsonFormatter adında bir class ekledim :

kodlar:

screenshot_9

oluşturduğumuz class a JsonMediaTypeFormatter sınıfını implement ettik , sonrasında constructor ımızda bi önceki örneğimizde yaptığımız gibi text/html content-type ına destek verdiğimizi tanımladık.

sonrasında JsonMediaTypeFormatter  a ait olan SetDefaultContentHeaders methodunu override ederek header content-type ını her zaman application/json olarak dönmesini sağladık.

bu işlemlerden sonra oluşturduğumuz MediaTypeFormat sınıfımız WebApiConfig.cs dosyamıza tanımlamamız kaldı.

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

şeklinde kodumuzu eklememiz yeterli olacaktır .

WebApiConfig.cs : 

Artık Accept : “text/html” olarak gelen requestler de json olarak sonucumuz döncek ve header content-type bilgisinde “application/json” olacaktır.

screenshot_10

 

Örnek: CSV Formater :

Apimizde response olarak csv formatın sonucu almak için örnek csv formater ve kullanımı :

CSVFormatter.cs

sonrasında formatter tanımlamasını yapmamız gerekce , WebApiConfgi.cs te yapabileceğimiz gibi Global.asax dosyasında da bu tanımlamayı yapabiliriz.

Global.asax  :

kullanımı : wepapi url parametre olarak format=csv yazdığımızda dönen sonuç eğer IEnumerable ise csv formatında sonuç verecektir. (IEnumerable kontrolü CSVFormatter.cs dosyasında CanWriteType metodunda yapılmıştır. )

Bu şekilde csv formatında response alınabilir.

 

Print Friendly, PDF & Email
Bu alana reklam verebilirsiniz!