खोज…


रूटिंग कैसे asp.net webapi में काम करता है

ASP.NET वेब एपीआई में, एक नियंत्रक एक वर्ग है जो HTTP अनुरोधों को संभालता है। नियंत्रक के सार्वजनिक तरीकों को एक्शन तरीके या बस क्रिया कहा जाता है।

जब वेब API फ्रेमवर्क अनुरोध प्राप्त करता है, तो यह अनुरोध को एक कार्रवाई के लिए रूट करता है। यह निर्धारित करने के लिए कि किस क्रिया को लागू करना है, रूपरेखा एक रूटिंग टेबल का उपयोग करती है। वेब API के लिए Visual Studio प्रोजेक्ट टेम्पलेट एक डिफ़ॉल्ट मार्ग बनाता है:

routes.MapHttpRoute(
    name: "API Default",
    routeTemplate: "**api/{controller}/{id}**",
    defaults: new { id = RouteParameter.Optional }
);

यह मार्ग WebApiConfig.cs फ़ाइल में परिभाषित है, जिसे App_Start निर्देशिका में रखा गया है: यहाँ छवि विवरण दर्ज करें

रूटिंग टेबल में प्रत्येक प्रविष्टि में एक मार्ग टेम्पलेट होता है। वेब एपीआई के लिए डिफ़ॉल्ट मार्ग टेम्पलेट " एपीआई / {कंट्रोलर} / {आईडी} " है। इस टेम्पलेट में, " एपीआई " एक शाब्दिक पथ खंड है, और { नियंत्रक } और { आईडी } प्लेसहोल्डर चर हैं।

जब वेब एपीआई फ्रेमवर्क एक HTTP अनुरोध प्राप्त करता है, तो यह रूटिंग टेबल में रूट टेम्पलेट में से एक के खिलाफ URI से मेल खाने की कोशिश करता है। यदि कोई रूट मेल नहीं खाता है, तो क्लाइंट को 404 त्रुटि मिलती है।

उदाहरण के लिए, निम्न URI डिफ़ॉल्ट मार्ग से मेल खाते हैं:

  • / Api / मूल्यों
  • / Api / मूल्यों / 1

हालाँकि, निम्न URI मेल नहीं खाता है, क्योंकि इसमें " एपीआई " खंड का अभाव है:

  • / मूल्यों / 1

एक मिलान मार्ग मिलते ही, वेब एपीआई नियंत्रक और कार्रवाई का चयन करता है:

  • नियंत्रक खोजने के लिए, वेब एपीआई {नियंत्रक} चर के मान में "नियंत्रक" जोड़ता है।
  • कार्रवाई खोजने के लिए, वेब एपीआई HTTP विधि को देखता है, और फिर एक कार्रवाई की तलाश करता है जिसका नाम उस HTTP विधि नाम से शुरू होता है। उदाहरण के लिए, GET अनुरोध के साथ, वेब API एक ऐसी कार्रवाई की तलाश करता है जो "Get ..." से शुरू होती है, जैसे कि "GetEmployee" या "GetAllEmployees"। यह सम्मेलन केवल GET, POST, PUT और DELETE विधियों पर लागू होता है।

आप अपने नियंत्रक पर विशेषताओं का उपयोग करके अन्य HTTP तरीकों को सक्षम कर सकते हैं। हम बाद में इसका एक उदाहरण देखेंगे।

  • मार्ग टेम्पलेट में अन्य प्लेसहोल्डर चर, जैसे कि {आईडी}, कार्रवाई मापदंडों के लिए मैप किए जाते हैं।

HTTP मेथड्स HTTP मेथड के लिए नेमिंग कन्वेंशन का उपयोग करने के बजाय, आप HttpGet, HttpPut, HttpPost, या Http.elete विशेषता के साथ एक्शन विधि को सजाने के लिए किसी क्रिया के लिए HTTP विधि को स्पष्ट रूप से निर्दिष्ट कर सकते हैं।

निम्न उदाहरण में, EmployeeGetEmployee विधि को GET अनुरोधों के लिए मैप किया गया है:

 public class EmployeesController : ApiController
    {
        [HttpGet]
        public EmployeeGetEmployee(id) {}
    }   

किसी कार्रवाई के लिए कई HTTP तरीकों की अनुमति देने के लिए, या GET, PUT, POST और DELETE के अलावा HTTP विधियों की अनुमति देने के लिए, AcceptVerbs विशेषता का उपयोग करें, जो HTTP विधियों की एक सूची लेता है।

public class EmployeesController: ApiController
{
    [AcceptVerbs("GET", "HEAD")]
    public Employee GetEmployee (id) { }
}

कार्रवाई नाम से रूटिंग

डिफ़ॉल्ट रूटिंग टेम्पलेट के साथ, वेब एपीआई कार्रवाई का चयन करने के लिए HTTP विधि का उपयोग करता है। हालाँकि, आप एक मार्ग भी बना सकते हैं जहाँ कार्रवाई नाम URI में शामिल है:

routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

इस रूट टेम्पलेट में, {action} पैरामीटर कंट्रोलर पर एक्शन विधि को नाम देता है। रूटिंग की इस शैली के साथ, अनुमत HTTP तरीकों को निर्दिष्ट करने के लिए विशेषताओं का उपयोग करें। उदाहरण के लिए, मान लें कि आपके नियंत्रक में निम्नलिखित विधि है:

public class EmployeesController: ApiController
{
    [HttpGet]
    public List<Employee> GetAllEmployees();
}

इस स्थिति में, " api / Employees / GetAllEmployees " के लिए एक GET अनुरोध GetAllEmployees विधि के लिए मैप करेगा।

आप ActionName विशेषता का उपयोग करके क्रिया नाम को ओवरराइड कर सकते हैं। निम्नलिखित उदाहरण में, दो क्रियाएँ हैं जो " एपीआई / कर्मचारी / ShowAllEmployees / id में मैप करती हैं । एक GET का समर्थन करती है और दूसरा POST का समर्थन करती है।"

public class EmployeesController : ApiController
{
    [HttpGet]
    [ActionName("ShowAllEmployees")]
    public List<Employee> GetAll(int id);

    [HttpPost]
    [ActionName("ShowAllEmployees")]
    public void GetAll (int id);

}

गैर-क्रिया

हम NonAction विशेषता का उपयोग करके किसी विधि को कार्रवाई के रूप में लागू होने से रोक सकते हैं। यह रूपरेखा के लिए संकेत है कि विधि एक क्रिया नहीं है, भले ही यह अन्यथा रूटिंग नियमों से मेल खाती हो।

 [NonAction]  
public string GetValues() { ... }

क्रिया आधारित रूटिंग उदाहरण।

विभिन्न http तरीकों के लिए एक ही यूआरएल अलग तरह से कार्य करता है। नीचे एक तालिका दर्शाया गया है।

HTTP VERB यूआरएल विवरण
प्राप्त / API / छात्रों सभी छात्रों को लौटाता है
प्राप्त / API / छात्रों / 5 स्टूडेंट आईडी = 5 का विवरण लौटाता है
पद / API / छात्रों एक नया छात्र जोड़ें
डाल / API / छात्रों / 5 स्टूडेंट को Id = 5 से अपडेट करें
हटाएँ / API / छात्रों / 5 छात्र को आईडी = 5 के साथ हटाएं


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow