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

सी # एएसपी.नेट वेबएपीआई में स्वीकृति शीर्षलेख के साथ संस्करण कैसे करें?

एक्सेप्ट हेडर सर्वर को बताता है कि ब्राउज़र किस फ़ाइल प्रारूप में डेटा चाहता है। इन फ़ाइल स्वरूपों को आमतौर पर MIME- प्रकार कहा जाता है। MIME का मतलब बहुउद्देशीय इंटरनेट मेल एक्सटेंशन है।

संस्करण नीचे दिए गए जैसे शीर्षलेखों में भेजा जा सकता है।

Version=1 StudentsV1Controller
Version=2 StudentsV2Controller

सी # एएसपी.नेट वेबएपीआई में स्वीकृति शीर्षलेख के साथ संस्करण कैसे करें?

चूंकि हमने स्वीकार्य हेडर में संस्करण को संभाला नहीं है, इसलिए हमें 404 त्रुटि नहीं मिल रही है क्योंकि हमारे पास केवल छात्र वी 1 और छात्र वी 2 नियंत्रक है। आइए हम अपना CustomControllerSelector add जोड़ें जो DefaultHttpControllerSelector वर्ग को लागू करता है।

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

उदाहरण

using System.Linq;
using System.Net.Http;
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 = "";
         var acceptHeader = request.Headers.Accept.Where(a => a.Parameters
         .Count(p => p.Name.ToLower() == "version") > 0);
         if (acceptHeader.Any()){
            versionNumber = acceptHeader.First().Parameters
            .First(p => p.Name.ToLower() == "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;
      }
   }
}

अगली चीज़ जो हमें अपने कस्टम नियंत्रक चयनकर्ता के साथ डिफ़ॉल्ट नियंत्रक चयनकर्ता को बदलने की आवश्यकता है। यह WebApiConfig.cs फ़ाइल में किया जाता है। ध्यान दें कि हम IHttpControllerSelector को बदल रहे हैं, हमारे CustomControllerSelector.DefaultHttpControllerSelector के साथ IHttpControllerSelector लागू करता है, इसलिए हम IHttpControllerSelector को बदल रहे हैं।

उदाहरण

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;
      }
   }
}

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

सी # एएसपी.नेट वेबएपीआई में स्वीकृति शीर्षलेख के साथ संस्करण कैसे करें?

सी # एएसपी.नेट वेबएपीआई में स्वीकृति शीर्षलेख के साथ संस्करण कैसे करें?



  1. हम C# ASP.NET WebAPI में क्रिया विधि के लिए उपनाम नाम कैसे निर्दिष्ट कर सकते हैं?

    नियंत्रक में सार्वजनिक विधि को क्रिया विधि कहा जाता है। आइए एक उदाहरण पर विचार करें जहां डेमोकंट्रोलर वर्ग एपीकंट्रोलर से लिया गया है और इसमें कई क्रिया विधियां शामिल हैं जिनके नाम HTTP क्रियाओं जैसे गेट, पोस्ट, पुटैंड डिलीट से मेल खाते हैं। उदाहरण public class DemoController : ApiController{  

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

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

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

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