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

C# ASP.NET WebAPI में Accept Header के साथ वर्जनिंग कैसे करें?

Accept Header सर्वर को बताता है कि ब्राउज़र किस फाइल फॉर्मेट में डेटा चाहता है। इन फाइल फॉर्मेट्स को आमतौर पर MIME-types कहा जाता है। MIME का अर्थ है Multipurpose Internet Mail Extensions।

Headers में वर्जनिंग भेजना

Version=1  StudentsV1Controller
Version=2  StudentsV2Controller

C# ASP.NET WebAPI में Accept Header के साथ वर्जनिंग कैसे करें?

चूंकि हमने Accept Headers में वर्जन को हैंडल नहीं किया है, हमें 404 Not Found त्रुटि मिल रही है क्योंकि हमारे पास केवल StudentV1 और StudentV2 कंट्रोलर हैं। आइए अपना खुद का CustomControllerSelector जोड़ते हैं जो DefaultHttpControllerSelector क्लास को इम्प्लीमेंट करता है।

CustomControllerSelector

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 को बदल रहे हैं।

WebApiConfig.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 }
        );
    }
}

StudentV1Controller

using DemoWebApplication.Models;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace DemoWebApplication.Controllers
{
    public class StudentV1Controller : ApiController
    {
        List students = new List
        {
            new StudentV1 { Id = 1, Name = "Mark" },
            new StudentV1 { Id = 2, Name = "John" }
        };

        public IEnumerable Get()
        {
            return students;
        }

        public StudentV1 Get(int id)
        {
            var studentForId = students.FirstOrDefault(x => x.Id == id);
            return studentForId;
        }
    }
}

StudentV2Controller

using DemoWebApplication.Models;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace DemoWebApplication.Controllers
{
    public class StudentV2Controller : ApiController
    {
        List students = new List
        {
            new StudentV2 { Id = 1, FirstName = "Roger", LastName = "Federer" },
            new StudentV2 { Id = 2, FirstName = "Tom", LastName = "Bruce" }
        };

        public IEnumerable Get()
        {
            return students;
        }

        public StudentV2 Get(int id)
        {
            var studentForId = students.FirstOrDefault(x => x.Id == id);
            return studentForId;
        }
    }
}

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

C# ASP.NET WebAPI में Accept Header के साथ वर्जनिंग कैसे करें?

C# ASP.NET WebAPI में Accept Header के साथ वर्जनिंग कैसे करें?

  1. C# ASP.NET WebAPI में एक्शन मेथड के लिए उपनाम (Alias) नाम कैसे असाइन करें? C# ASP.NET WebAPI में एक्शन मेथड के लिए उपनाम (Alias) नाम कैसे असाइन करें?

    कंट्रोलर में एक पब्लिक मेथड को एक्शन मेथड कहा जाता है। आइए एक उदाहरण पर विचार करें जहां DemoController क्लास ApiController से डेराइव्ड है और इसमें कई एक्शन मेथड्स हैं जिनके नाम HTTP वर्ब्स जैसे Get, Post, Put और Delete से मेल खाते हैं। उदाहरण public class DemoController : ApiController { public

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

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

  1. C# ASP.NET WebAPI में एक्शन मेथड से कस्टम रिजल्ट टाइप कैसे लौटाएं? C# ASP.NET WebAPI में एक्शन मेथड से कस्टम रिजल्ट टाइप कैसे लौटाएं?

    हम IHttpActionResult इंटरफ़ेस को इम्प्लीमेंट करके अपनी खुद की कस्टम क्लास को रिजल्ट टाइप के रूप में बना सकते हैं। IHttpActionResult में एक सिंगल मेथड, ExecuteAsync होता है, जो एसिंक्रोनसली एक HttpResponseMessage इंस्टेंस बनाता है। public interface IHttpActionResult { Task ExecuteAsync(Cancellat