युक्त मौजूदा परियोजना नियंत्रकों है कि या तो से विरासत है:ApiController और कार्रवाई का नाम से URL प्राप्त, एक परियोजना में नियंत्रकों और ApiControllers
Controller
:"{controller}/{action}/{id}"
साथRouteTable.Routes.MapRoute
।ApiController
:GlobalConfiguration.Configure
और कॉलबैकMapRoute
"api/{controller}/{id}"
के साथ।
सबकुछ ठीक काम करता है, लेकिन मुझे इन दोनों प्रकार के नियंत्रकों में क्रिया विधियों के लिए यूआरएल उत्पन्न करने की आवश्यकता है। यह देखते हुए:
- एक नाम या एक नियंत्रक है कि इन दोनों में से किसी से विरासत के प्रकार, और
- एक कार्रवाई विधि नाम
फिर, मैं कैसे के लिए उचित यूआरएल उत्पन्न कर सकते हैं वेब एपीआई पक्ष?
मैं अभी कार्रवाई और नियंत्रक नाम प्राप्त करने के लिए प्रतिबिंब का उपयोग कर रहा हूं, और फिर UrlHelper.Action(actionName, controllerName, routeValueDictionary)
का उपयोग करके वेब साइट मार्गों के लिए सही यूआरएल प्राप्त कर रहा हूं।
हालांकि, यह विधि (निश्चित रूप से) वेबएपीआई पक्ष के लिए इस तरह के यूआरएल उत्पन्न करती है: /ApiControllerName/Get?parameter1=value
जब इसे /api/ApiControllerName?parameter1=value
होने की आवश्यकता होती है और यह अलग ज्ञान है कि यह एक अनुरोध है।
उद्देश्य: यह वेब साइट के लिए धूम्रपान परीक्षण पृष्ठ के लिए है जो परीक्षण का धुआं तय करने के लिए विशेषताओं और प्रतिबिंब का उपयोग करता है। पूरे प्रोजेक्ट में एक ही विशेषता का उपयोग करने में सक्षम होना अच्छा होगा, और इसके अलावा यह सही UrlHelper
का उपयोग करने में सक्षम होना बहुत अच्छा होगा जो रूटिंग टेबल से अवगत है और सही उपसर्ग जैसे /api/
का उत्पादन कर सकता है कोड मानते हुए, शायद गलत तरीके से, कि एपीआई मार्ग api
के साथ पंजीकृत थे और नहीं, webapi
कहें।
अद्यतन
निरंतर अनुसंधान के बाद मैं the Url.HttpRouteUrl
method जो वेबएपीआई यूआरएल उत्पन्न कर सकते हैं पाया है, लेकिन यह एक मार्ग का नाम, नहीं एक कार्रवाई विधि नाम जानने की आवश्यकता है।
मैंने इस पर और भी अधिक शोध किया है और समाधान के करीब नहीं मिला है। ऐसा लगता है कि आप उपयुक्त मार्ग का मार्ग नाम, you can cook up a Url easily जानते हैं। कुछ संभावित संकेत भी हैं here और here। लेकिन यदि वेबएपी के लिए कई मार्ग हैं, तो आप कैसे जानते हैं कि कौन सा नियंत्रक और कार्यवाही से मेल खाता है? एक नियंत्रक और कार्रवाई का चयन करने में एमवीसी पहले से ही क्या करता है, यह पुन: कार्यान्वित करने के लिए गूंगा होगा। मुझे लगता है कि मैं प्रत्येक वेबएपी मार्ग का उपयोग करके दिए गए पैरामीटर से एक यूआरएल बना सकता हूं, फिर यूआरएल को अपने पैसों के माध्यम से चलाएं (उपर्युक्त लिंक में से कुछ का उपयोग करके) और देखें कि क्या यह वांछित नियंत्रक से मेल खाता है ... yuck।
एक आसान तरीका होना चाहिए।
अभी के लिए मुझे आगे बढ़ना होगा, लेकिन उम्मीद है कि कोई मेरी मदद कर सकता है।
यह थोड़ा स्पष्टीकरण के साथ काम करता है। 'httproute = false' के लिए, किसी को 'UriHelper.Action' का उपयोग करना होगा और क्रिया विधि नाम को पैरामीटर के रूप में पास करना होगा, इसे' रूटवेल्यूलेक्शन 'में नहीं डालना चाहिए। साथ ही, वेबएपी में, HTTP क्रिया को सही तरीके से समझने के बारे में कुछ मज़ेदारता है, लेकिन अभी के लिए मैं संतुष्ट हूं ('action =" get "या 'action =" methodName "में गुजर रहा है" केवल एक क्वेरीस्ट्रिंग मान प्रोजेक्ट करता है)। – ErikE