কম্পিউটার

C# ASP.NET WebAPI-তে স্বীকার শিরোনাম সহ সংস্করণ কীভাবে করবেন?


Accept হেডার সার্ভারকে বলে যে কোন ফাইল ফরম্যাটে ব্রাউজার ডেটা চায়৷ এই ফাইল ফরম্যাটগুলিকে সাধারণত MIME-টাইপ বলা হয়৷ MIME এর অর্থ হল মাল্টিপারপাস ইন্টারনেট মেল এক্সটেনশন।

ভার্সনিং নিচের মত হেডারে পাঠানো যেতে পারে।

Version=1 StudentsV1Controller
Version=2 StudentsV2Controller

C# ASP.NET WebAPI-তে স্বীকার শিরোনাম সহ সংস্করণ কীভাবে করবেন?

যেহেতু আমরা স্বীকার শিরোনামে সংস্করণটি পরিচালনা করিনি, তাই আমরা 404 নট ফাউন্ড ত্রুটি পাচ্ছি কারণ আমাদের কাছে শুধুমাত্র StudentV1 এবং StudentV2 কন্ট্রোলার রয়েছে। আসুন আমাদের নিজস্ব CustomControllerSelector যোগ করি যা 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 }
      );
   }
}

StudentV1 কন্ট্রোলার

উদাহরণ

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

StudentV2Controller

উদাহরণ

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

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

C# ASP.NET WebAPI-তে স্বীকার শিরোনাম সহ সংস্করণ কীভাবে করবেন?

C# ASP.NET WebAPI-তে স্বীকার শিরোনাম সহ সংস্করণ কীভাবে করবেন?



  1. কিভাবে C# ASP.NET WebAPI-তে URI-এর সাথে ওয়েব API সংস্করণ করবেন?

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

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

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