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

C# ASP.NET WebAPI में Querystring पैरामीटर के साथ वर्जनिंग कैसे करें?

DefaultHttpControllerSelector वेब एपीआई में वर्ग उपयुक्त नियंत्रक क्रिया पद्धति का चयन करने के लिए जिम्मेदार है जिसे हम यूआरआई में भेजते हैं।

मान लें कि हमें नीचे की तरह क्वेरी स्ट्रिंग में वर्जनिंग को लागू करना है

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

अगर हम क्वेरी स्ट्रिंग में वर्जनिंग जानकारी पास करते हैं जैसे https://localhost:58174/api/student?v=1 परिणाम 404 नहीं मिला त्रुटि प्रतिक्रिया क्योंकि SelectController() विधि जो मौजूद है DefaultHttpControllerSelector छात्र नियंत्रक की तलाश करेगा लेकिन हमारे पास है केवल छात्रV1नियंत्रक और छात्रV2नियंत्रक।

C# ASP.NET WebAPI में Querystring पैरामीटर के साथ वर्जनिंग कैसे करें?

इस मामले को संभालने के लिए, हमें अपना CustomControllerSelector . जोड़ना चाहिए जो DefaultHttpControllerSelector वर्ग को लागू करता है।

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

उदाहरण

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 फ़ाइल में किया जाता है। ध्यान दें कि हम 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 }
      );
   }
}

StudenV1Controller -

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 से मिलते हैं।

C# ASP.NET WebAPI में Querystring पैरामीटर के साथ वर्जनिंग कैसे करें?


  1. C# ASP.NET WebAPI में विभिन्न प्रकार के फ़िल्टर क्या हैं?

    वेबएपी फ्रेमवर्क अनुरोध प्रसंस्करण के विभिन्न स्तरों पर अतिरिक्त तर्क को इंजेक्ट करने के लिए फिल्टर का उपयोग किया जाता है। फ़िल्टर क्रॉस-कटिंग चिंताओं (लॉगिंग, प्राधिकरण और कैशिंग) के लिए एक रास्ता प्रदान करते हैं। एक घोषणात्मक या प्रोग्रामेटिक तरीके से एक क्रिया विधि या नियंत्रक पर फ़िल्टर लागू किए

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

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

  1. C# ASP.NET WebAPI में कंट्रोलर एक्शन के विभिन्न रिटर्न प्रकार क्या हैं?

    वेब एपीआई क्रिया विधि में निम्नलिखित रिटर्न प्रकार हो सकते हैं। शून्य आदिम प्रकार/जटिल प्रकार HttpResponseMessage IHttpActionResult शून्य - यह आवश्यक नहीं है कि सभी क्रिया विधियों को कुछ वापस करना होगा। इसमें शून्य वापसी प्रकार हो सकता है। उदाहरण using DemoWebApplication.Models using