Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C#

सी # एएसपी.नेट वेबएपीआई में कस्टम मीडिया प्रकार के साथ वर्जनिंग कैसे करें?

मीडिया प्रकार एपीआई को क्लाइंट को पेलोड में डेटा की व्याख्या करने के बारे में सूचित करने की अनुमति देते हैं। HTTP प्रोटोकॉल में, मीडिया प्रकार को टेक्स्ट/एचटीएमएल, एप्लिकेशन/जेसन, और एप्लिकेशन/एक्सएमएल जैसे पहचानकर्ताओं के साथ निर्दिष्ट किया जाता है, जो क्रमशः एचटीएमएल, जेएसओएन और एक्सएमएल से मेल खाते हैं, जो सबसे आम वेब प्रारूप हैं। अन्य API विशिष्ट मीडिया प्रकार भी हैं, जैसे कि application/vnd.api+json।

नीचे ऐसे संस्करण दिए गए हैं जिन्हें मीडिया प्रकारों में भेजने की आवश्यकता है।

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

सी # एएसपी.नेट वेबएपीआई में कस्टम मीडिया प्रकार के साथ वर्जनिंग कैसे करें?

अपना खुद का CustomControllerSelector . जोड़ना उपरोक्त त्रुटि को ठीक कर देगा।

कस्टम नियंत्रक चयनकर्ता -

उदाहरण

using System.Linq;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Web.Http;
using System.Web.Http.Controllers;
using System.Web.Http.Dispatcher;
namespace WebAPI.Custom{
   public class CustomControllerSelector : DefaultHttpControllerSelector{
      private HttpConfiguration _config;
      public CustomControllerSelector(HttpConfiguration config) : base(config){
         _config = config;
      }
      public override HttpControllerDescriptor SelectController(HttpRequestMessage
      request){
         var controllers = GetControllerMapping();
         var routeData = request.GetRouteData();
         var controllerName = routeData.Values["controller"].ToString();
         string versionNumber = "";
         string regex = @"application\/vnd\.demo\.([a-z]+)\.v(?<version>[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);
            versionNumber = match.Groups["version"].Value;
         }
         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;
         }
         return null;
      }
   }
}

WebApi.Config.cs -

उदाहरण

public static class WebApiConfig{
   public static void Register(HttpConfiguration config){
      config.Services.Replace(typeof(IHttpControllerSelector), new CustomControllerSelector(config));
      config.MapHttpAttributeRoutes();
      config.Routes.MapHttpRoute(
         name: "DefaultApi",
         routeTemplate: "api/{controller}/{id}",
         defaults: new { id = RouteParameter.Optional }
      );
   }
}

छात्रV1नियंत्रक -

उदाहरण

using DemoWebApplication.Models;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace DemoWebApplication.Controllers{
   public class StudentV1Controller : ApiController{
      List<StudentV1> students = new List<StudentV1>{
         new StudentV1{
            Id = 1,
            Name = "Mark"
         },
         new StudentV1{
            Id = 2,
            Name = "John"
         }
      };
      public IEnumerable<StudentV1> Get(){
         return students;
      }
      public StudentV1 Get(int id){
         var studentForId = students.FirstOrDefault(x => x.Id == id);
         return studentForId;
      }
   }
}

StudentV2नियंत्रक -

उदाहरण

using DemoWebApplication.Models;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace DemoWebApplication.Controllers{
   public class StudentV2Controller : ApiController{
      List<StudentV2> students = new List<StudentV2>{
         new StudentV2{
            Id = 1,
            FirstName = "Roger",
            LastName = "Federer"
         },
         new StudentV2{
            Id = 2,
            FirstName = "Tom",
            LastName = "Bruce"
         }
      };
      public IEnumerable<StudentV2> Get(){
         return students;
      }
      public StudentV2 Get(int id){
         var studentForId = students.FirstOrDefault(x => x.Id == id);
         return studentForId;
      }
   }
}

नीचे दिए गए आउटपुट उन परिणामों को दिखाते हैं जो हमें कस्टम मीडिया प्रकारों में वर्जनिंग के साथ StudentV1 और StudentV2controllers से मिलते हैं।

सी # एएसपी.नेट वेबएपीआई में कस्टम मीडिया प्रकार के साथ वर्जनिंग कैसे करें?

सी # एएसपी.नेट वेबएपीआई में कस्टम मीडिया प्रकार के साथ वर्जनिंग कैसे करें?

तो अब यदि हम कस्टम मीडिया प्रकार का उपयोग करके xml प्रारूप में समान आउटपुट प्राप्त करना चाहते हैं, तो नीचे दिए गए कस्टम मीडिया प्रकार को webapiconfig.cs

में जोड़ें।

उदाहरण

public static void Register(HttpConfiguration config){
   config.MapHttpAttributeRoutes();
   config.Services.Replace(typeof(IHttpControllerSelector), new
   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(
      name: "DefaultApi",
      routeTemplate: "api/{controller}/{id}",
      defaults: new { id = RouteParameter.Optional }
   );
}

सी # एएसपी.नेट वेबएपीआई में कस्टम मीडिया प्रकार के साथ वर्जनिंग कैसे करें?

उपरोक्त उदाहरण में हम देख सकते हैं कि आउटपुट एक्सएमएल प्रारूप में है जैसा कि कस्टम मीडिया प्रकार में निर्दिष्ट है।


  1. C# ASP.NET WebAPI में CORS समस्या को कैसे हल करें?

    क्रॉस-ओरिजिनल रिसोर्स शेयरिंग (सीओआरएस) एक ऐसा तंत्र है जो ब्राउज़र को एक मूल पर चलने वाले वेब एप्लिकेशन को एक अलग मूल से चयनित संसाधनों तक पहुंच देने के लिए अतिरिक्त HTTP शीर्षलेखों का उपयोग करता है। एक वेब एप्लिकेशन एक क्रॉस-ओरिजिनल HTTP अनुरोध को तब निष्पादित करता है जब वह ऐसे संसाधन का अनुरोध कर

  1. सी # एएसपी.नेट वेबएपीआई में किसी क्रिया विधि से कस्टम परिणाम प्रकार कैसे वापस करें?

    हम IHttpActionResult इंटरफ़ेस . को लागू करके परिणाम प्रकार के रूप में अपना स्वयं का कस्टम वर्ग बना सकते हैं . IHttpActionResult में एक ही विधि है, ExecuteAsync, जो अतुल्यकालिक रूप से एक HttpResponseMessage उदाहरण बनाता है। public interface IHttpActionResult {    Task<HttpResponseMessag

  1. ज़ूम के साथ कस्टम पृष्ठभूमि का उपयोग कैसे करें

    महामारी के दौरान लाखों लोगों ने वीडियो कॉन्फ्रेंसिंग के लिए जूम का इस्तेमाल करना शुरू कर दिया है। कई लोगों ने कस्टम बैकग्राउंड फीचर का लाभ उठाया है जो आपको अपने पीछे के कमरे से अपने वीडियो बैकग्राउंड को सचमुच अपनी इच्छानुसार कुछ भी बदलने की अनुमति देता है। आप पूर्व-निर्धारित पृष्ठभूमि के सेट में से