মিডিয়া প্রকারগুলি একটি APIকে ক্লায়েন্টকে কীভাবে পেলোডে ডেটা ব্যাখ্যা করতে হয় তা জানাতে দেয়। এইচটিটিপি প্রোটোকলে, মিডিয়া প্রকারগুলিকে পাঠ্য/এইচটিএমএল, অ্যাপ্লিকেশন/জেসন এবং অ্যাপ্লিকেশন/এক্সএমএল-এর মতো শনাক্তকারীর সাথে নির্দিষ্ট করা হয়, যা যথাক্রমে এইচটিএমএল, জেএসওএন, এবং এক্সএমএল, সবচেয়ে সাধারণ ওয়েব ফর্ম্যাটের সাথে মিলে যায়। এছাড়াও অন্যান্য API-নির্দিষ্ট মিডিয়া প্রকার রয়েছে, যেমন application/vnd.api+json.
নীচের সংস্করণগুলি মিডিয়া প্রকারে পাঠাতে হবে৷
৷application/vnd.demo.students.v1+json StudentsV1Controllerapplication/vnd.demo.students.v2+json StudentsV2Controller
আমাদের নিজস্ব CustomControllerSelector যোগ করা হচ্ছে উপরের ত্রুটিটি ঠিক করবে।
কাস্টম কন্ট্রোলার নির্বাচক −
উদাহরণ
সিস্টেম. কাস্টম{ পাবলিক ক্লাস CustomControllerSelector :DefaultHttpControllerSelector{ private HttpConfiguration _config; সর্বজনীন কাস্টম কন্ট্রোলার নির্বাচক (Http কনফিগারেশন কনফিগারেশন):বেস(কনফিগারেশন){ _config =কনফিগারেশন; } সর্বজনীন ওভাররাইড HttpControllerDescriptor SelectController(HttpRequestMessage অনুরোধ){ var controllers =GetControllerMapping(); var routeData =request.GetRouteData(); var controllerName =routeData.Values["controller"].ToString(); স্ট্রিং সংস্করণ সংখ্যা =""; স্ট্রিং রেজেক্স =@"অ্যাপ্লিকেশন\/vnd\.demo\.([a-z]+)\.v(?WebApi.Config.cs৷ −
উদাহরণ
পাবলিক স্ট্যাটিক ক্লাস WebApiConfig{ পাবলিক স্ট্যাটিক ভ্যায়েড রেজিস্টার(HttpConfiguration কনফিগারেশন){config.Services.Replace(typeof(IHttpControllerSelector), নতুন CustomControllerSelector(config)); config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( নাম:"DefaultApi", routeTemplate:"api/{controller}/{id}", ডিফল্ট:new { id =RouteParameter.Optional } ); }}
StudentV1 কন্ট্রোলার −
উদাহরণ
DemoWebApplication.Models ব্যবহার করে;using System.Collections.Generic;using System.Linq;using System.Web.Http;namespace DemoWebApplication.Controllers{ পাবলিক ক্লাস StudentV1Controller :ApiController{ তালিকা<স্টুডেন্টভি1>ছাত্র =নতুন> new StudentV1{Id =1, Name ="Mark" }, new StudentV1{Id =2, Name ="John" } }; সর্বজনীন IEnumerableGet(){ ছাত্র ফেরত; } পাবলিক StudentV1 Get(int id){ var studentForId =students.FirstOrDefault(x => x.Id ==id); StudentForId ফেরত; } } }
StudentV2Controller −
উদাহরণ
DemoWebApplication.Models ব্যবহার করে;using System.Collections.Generic;using System.Linq;using System.Web.Http;namespace DemoWebApplication.Controllers{ পাবলিক ক্লাস StudentV2Controller :ApiController{ তালিকা<স্টুডেন্টV2>ছাত্র <ভিডেন্ট>এস =নতুন new StudentV2{Id =1, FirstName ="Roger", LastName ="Federer" }, new StudentV2{ Id =2, FirstName ="Tom", LastName ="Bruce" } }; সর্বজনীন IEnumerableGet(){ রিটার্ন ছাত্র; } পাবলিক StudentV2 Get(int id){ var studentForId =students.FirstOrDefault(x => x.Id ==id); StudentForId ফেরত; } } }
নীচের আউটপুটগুলি কাস্টম মিডিয়া প্রকারের সংস্করণ সহ StudentV1 এবং StudentV2 কন্ট্রোলার থেকে আমরা যে ফলাফলগুলি পাই তা দেখায়৷
তাই এখন যদি আমরা কাস্টম মিডিয়া টাইপ ব্যবহার করে xml ফরম্যাটে একই আউটপুট পেতে চাই, webapiconfig.cs-এ নীচের কাস্টম মিডিয়া টাইপ যোগ করুন
উদাহরণ
পাবলিক স্ট্যাটিক ভ্যায়েড রেজিস্টার(HttpConfiguration config){config.MapHttpAttributeRoutes(); config.Services.Replace(typeof(IHttpControllerSelector), নতুন CustomControllerSelector(config)); config.Formatters.XmlFormatter.SupportedMediaTypes .Add(new MediaTypeHeaderValue("application/vnd.demo.student.v1+xml")); config.Formatters.XmlFormatter.SupportedMediaTypes .Add(new MediaTypeHeaderValue("application/vnd.demo.student.v2+xml")); config.Routes.MapHttpRoute( নাম:"DefaultApi", routeTemplate:"api/{controller}/{id}", ডিফল্ট:new { id =RouteParameter.Optional } );}
উপরের উদাহরণে আমরা দেখতে পাচ্ছি যে আউটপুটটি কাস্টম মিডিয়া টাইপের মধ্যে নির্দিষ্ট করা XML ফর্ম্যাটে রয়েছে৷