কম্পিউটার

C# ASP.NET WebAPI তে কাস্টম মিডিয়া টাইপের সাথে সংস্করণ কীভাবে করবেন?


মিডিয়া প্রকারগুলি একটি APIকে ক্লায়েন্টকে কীভাবে পেলোডে ডেটা ব্যাখ্যা করতে হয় তা জানাতে দেয়। এইচটিটিপি প্রোটোকলে, মিডিয়া প্রকারগুলিকে পাঠ্য/এইচটিএমএল, অ্যাপ্লিকেশন/জেসন এবং অ্যাপ্লিকেশন/এক্সএমএল-এর মতো শনাক্তকারীর সাথে নির্দিষ্ট করা হয়, যা যথাক্রমে এইচটিএমএল, জেএসওএন, এবং এক্সএমএল, সবচেয়ে সাধারণ ওয়েব ফর্ম্যাটের সাথে মিলে যায়। এছাড়াও অন্যান্য API-নির্দিষ্ট মিডিয়া প্রকার রয়েছে, যেমন application/vnd.api+json.

নীচের সংস্করণগুলি মিডিয়া প্রকারে পাঠাতে হবে৷

application/vnd.demo.students.v1+json StudentsV1Controllerapplication/vnd.demo.students.v2+json StudentsV2Controller

C# ASP.NET WebAPI তে কাস্টম মিডিয়া টাইপের সাথে সংস্করণ কীভাবে করবেন?

আমাদের নিজস্ব 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(?[0-9]+)\+([a-z]+)"; var acceptHeader =request.Headers.Accept .Where(a => Regex.IsMatch(a.MediaType, regex, RegexOptions.IgnoreCase)); if (acceptHeader.Any()){ var match =Regex.Match(acceptHeader.First().MediaType, regex, RegexOptions.IgnoreCase); সংস্করণসংখ্যা =মিল।গ্রুপ["সংস্করণ"]।মান; } HttpControllerDescriptor controllerDescriptor; if (versionNumber =="1"){ controllerName =string.Concat(controllerName, "V1"); } else if (versionNumber =="2"){ controllerName =string.Concat(controllerName, "V2"); } if (controllers.TryGetValue(controllerName, out controllerDescriptor)){ return controllerDescriptor; } রিটার্ন নাল; } } }

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" } }; সর্বজনীন IEnumerable Get(){ ছাত্র ফেরত; } পাবলিক 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" } }; সর্বজনীন IEnumerable Get(){ রিটার্ন ছাত্র; } পাবলিক StudentV2 Get(int id){ var studentForId =students.FirstOrDefault(x => x.Id ==id); StudentForId ফেরত; } } }

নীচের আউটপুটগুলি কাস্টম মিডিয়া প্রকারের সংস্করণ সহ StudentV1 এবং StudentV2 কন্ট্রোলার থেকে আমরা যে ফলাফলগুলি পাই তা দেখায়৷

C# ASP.NET WebAPI তে কাস্টম মিডিয়া টাইপের সাথে সংস্করণ কীভাবে করবেন?

C# ASP.NET WebAPI তে কাস্টম মিডিয়া টাইপের সাথে সংস্করণ কীভাবে করবেন?

তাই এখন যদি আমরা কাস্টম মিডিয়া টাইপ ব্যবহার করে 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 } );}

C# ASP.NET WebAPI তে কাস্টম মিডিয়া টাইপের সাথে সংস্করণ কীভাবে করবেন?

উপরের উদাহরণে আমরা দেখতে পাচ্ছি যে আউটপুটটি কাস্টম মিডিয়া টাইপের মধ্যে নির্দিষ্ট করা XML ফর্ম্যাটে রয়েছে৷


  1. কিভাবে আমরা C# ASP.NET WebAPI তে অ্যাকশন পদ্ধতির জন্য উপনামের নাম নির্ধারণ করতে পারি?

  2. কিভাবে C# ASP.NET WebAPI এ CORS সমস্যা সমাধান করবেন?

  3. C# ASP.NET WebAPI-তে একটি অ্যাকশন পদ্ধতি থেকে কাস্টম ফলাফলের ধরন কীভাবে ফেরত দেওয়া যায়?

  4. জুম সহ একটি কাস্টম পটভূমি কীভাবে ব্যবহার করবেন