একটি মিডিয়া টাইপ, যাকে MIME টাইপও বলা হয়, ডেটার একটি টুকরোর ফরম্যাট শনাক্ত করে। HTTP-এ, মিডিয়া টাইপ মেসেজ বডির ফরম্যাট বর্ণনা করে। একটি মিডিয়া টাইপ দুটি স্ট্রিং নিয়ে গঠিত: একটি টাইপ এবং একটি সাবটাইপ। উদাহরণস্বরূপ:
- text/html
- image/png
- application/json
যখন একটি HTTP মেসেজ এন্টিটি-বডি ধারণ করে, তখন Content-Type হেডার মেসেজ বডির ফরম্যাট নির্দিষ্ট করে। এটি রিসিভারকে মেসেজ বডির কন্টেন্ট পার্স করার পদ্ধতি বলে দেয়।
যখন ক্লায়েন্ট একটি রিকোয়েস্ট মেসেজ পাঠায়, তখন এটি Accept হেডার অন্তর্ভুক্ত করতে পারে। Accept হেডার সার্ভারকে বলে যে ক্লায়েন্ট সার্ভার থেকে কোন মিডিয়া টাইপ(গুলো) চায়।
Accept: text/html,application/xhtml+xml,application/xml
মিডিয়া টাইপ নির্ধারণ করে Web API কীভাবে HTTP মেসেজ বডি সিরিয়ালাইজ এবং ডিসিরিয়ালাইজ করবে। Web API XML, JSON, BSON, এবং form-urlencoded ডেটার জন্য বিল্ট-ইন সাপোর্ট দেয়, এবং আপনি মিডিয়া ফরম্যাটার লিখে অতিরিক্ত মিডিয়া টাইপ সাপোর্ট করতে পারেন।
MediaTypeFormatter একটি অ্যাবস্ট্রাক্ট ক্লাস जिससे JsonMediaTypeFormatter এবং XmlMediaTypeFormatter ক্লাসগুলো ইনহেরিট করে। JsonMediaTypeFormatter JSON হ্যান্ডেল করে এবং XmlMediaTypeFormatter XML হ্যান্ডেল করে। মিডিয়া টাইপ WebApiConfig ক্লাসের Register মেথডে নির্দিষ্ট করা হয়। আসুন কিছু উদাহরণ দেখি যেখানে মিডিয়া টাইপের সাথে খেলা করা যায়।
Student Controller
উদাহরণ
using DemoWebApplication.Models;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace DemoWebApplication.Controllers
{
public class StudentController : ApiController
{
List students = new List
{
new Student{ Id = 1, Name = "Mark" },
new Student{ Id = 2, Name = "John" }
};
public IEnumerable Get()
{
return students;
}
}
}
Accept হেডার মান নির্বিশেষে ASP.NET Web API সার্ভিস থেকে শুধু JSON রিটার্ন করার উদাহরণ
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
উপরের কোড ব্যবহার করে, আমরা XmlFormatter রিমুভ করেছি যা ASP.NET Web API-কে ক্লায়েন্ট রিকোয়েস্টের Accept হেডার মান নির্বিশেষে সবসময় JSON রিটার্ন করতে বাধ্য করে। এই টেকনিকটি ব্যবহার করুন যখন আপনি আপনার সার্ভিসকে শুধু JSON সাপোর্ট করতে চান, XML নয়।
Accept হেডার মান নির্বিশেষে শুধু XML রিটার্ন করার উদাহরণ
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Formatters.Remove(config.Formatters.JsonFormatter);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
ব্রাউজার থেকে রিকোয়েস্ট করা হলে XMLের পরিবর্তে JSON রিটার্ন করার উদাহরণ
যখন ব্রাউজার থেকে আমাদের StudentController-এ রিকোয়েস্ট করা হয়, তখন রেসপন্স XML ফরম্যাটে আসে। এর কারণ হল ব্রাউজার ডিফল্টভাবে Accept হেডার হিসেবে text/html পাঠায়।
এখন দেখি ব্রাউজার থেকে রিকোয়েস্ট ইস্যু করা হলে XMLের পরিবর্তে JSON রেসপন্স কীভাবে পাঠানো যায়।
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
নিচের আউটপुटে দেখানো হয়েছে যে ব্রাউজার থেকে রিকোয়েস্ট ফায়ার করা হলে Accept হেডার text/html থাকার সত্ত্বেও রেসপন্স JSON টাইপের।