কম্পিউটার টিউটোরিয়াল

C# ASP.NET WebAPI-তে কোয়েরি স্ট্রিং প্যারামিটার দিয়ে ভার্সনিং কীভাবে করবেন?

Web API-তে DefaultHttpControllerSelector ক্লাস URI-এ পাঠানো কন্ট্রোলার একশন মেথড সিলেক্ট করার জন্য দায়িত্বে থাকে।

মান লেই কোয়েরি স্ট্রিং-এ ভার্সনিং ইমপ্লিমেন্ট করতে হয় নিচের মত:

v=1  StudentsV1Controller (Version 1)
v=2  StudentsV2Controller (Version 2)

যদি আমরা কোয়েরি স্ট্রিং-এ ভার্সনিং ইনফরমেশন পাস করি যেমন `https://localhost:58174/api/student?v=1`, তবে 404 Not Found এরর রেসপন্স আসবে কারণ DefaultHttpControllerSelector-এ থাকা SelectController() মেথড `StudentsController` খুঁজবে কিন্তু আমাদের শুধু `StudentsV1Controller` এবং `StudentsV2Controller` আছে।

C# ASP.NET WebAPI-তে কোয়েরি স্ট্রিং প্যারামিটার দিয়ে ভার্সনিং কীভাবে করবেন?

এই কেস হ্যান্ডেল করতে, আমাদের নিজস্ব CustomControllerSelector যোগ করতে হবে যা DefaultHttpControllerSelector ক্লাস ইমপ্লিমেন্ট করবে।

CustomControllerSelector ইমপ্লিমেন্টেশন

using System.Net.Http;
using System.Web;
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 = "1";

            var versionQueryString = HttpUtility.ParseQueryString(request.RequestUri.Query);
            if (versionQueryString["v"] != null)
            {
                versionNumber = versionQueryString["v"];
            }

            if (versionNumber == "1")
            {
                controllerName = controllerName + "V1";
            }
            else if (versionNumber == "2")
            {
                controllerName = controllerName + "V2";
            }

            HttpControllerDescriptor controllerDescriptor;
            if (controllers.TryGetValue(controllerName, out controllerDescriptor))
            {
                return controllerDescriptor;
            }
            return null;
        }
    }
}

এরপর ডিফল্ট কন্ট্রোলার সিলেক্টরকে আমাদের কাস্টম কন্ট্রোলার সিলেক্টর দিয়ে রিপ্লেস করতে হবে। এটি `WebApiConfig.cs` ফাইলে করা হয়।

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

আউটপুট

নিচের আউটপুটগুলো কোয়েরি স্ট্রিং-এ ভার্সনিং ব্যবহার করে StudentV1 এবং StudentV2 কন্ট্রোলার থেকে পাওয়া ফলাফল দেখাচ্ছে।

C# ASP.NET WebAPI-তে কোয়েরি স্ট্রিং প্যারামিটার দিয়ে ভার্সনিং কীভাবে করবেন?

  1. C# ASP.NET WebAPI-তে ফিল্টারের বিভিন্ন প্রকার কী কী?

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

  3. C# ASP.NET WebAPI-তে একশন মেথড থেকে কাস্টম রেজাল্ট টাইপ রিটার্ন কীভাবে করবেন?

  4. C# ASP.NET WebAPI-তে কন্ট্রোলার একশনের বিভিন্ন রিটার্ন টাইপ কী কী?