5

एमवीसी और वेबएपीआई के भीतर मार्गों के बारे में त्वरित प्रश्न। मैं मार्ग config.cs के लिए एक मार्ग को शामिल किया है:वेबएपीआई नियंत्रक के भीतर एमवीसी मार्ग

 routes.MapRoute(
      name: "ConfirmEmail", 
      url: "ConfirmEmail/{userid}", 
      defaults: new { controller = "Email", action = "ConfirmEmail" } 
     ); 

यह सामान्य के अनुसार Global.asax में पंजीकृत है:

RouteConfig.RegisterRoutes(RouteTable.Routes); 

मैं एक ईमेल के भीतर उपयोग के लिए URL जनरेट करने के लिए कोशिश कर रहा हूँ जो एक वेबएपीआई नियंत्रक समारोह के भीतर एक समारोह कॉल के हिस्से के रूप में भेजा जाता है।

var url = Url.Link("ConfirmEmail", new { userid = "someUserId" }); 

अब मैं छाप मार्ग शब्दकोशों के तहत दोनों MVC में साझा किया गया था और: मैं UrlHelper.Link समारोह का उपयोग कर रहा एक यूआरएल उत्पन्न करने के लिए प्रयास करने के लिए, फिर भी मैं मार्ग कह एक त्रुटि प्राप्त नाम से नहीं पाया जा सकता वेबएपीआई नियंत्रक संदर्भ हालांकि मैं आने वाली वेब एपीआई कॉल (अनुरोध ऑब्जेक्ट पर) के रूट डिक्शनरी के भीतर एमवीसी मार्ग नहीं देख सकता हूं, हालांकि मैंने परिभाषित वेबएपीआई मार्ग हैं।

क्या मुझे कुछ याद आ रही है?

उत्तर

1

एमवीसी और वेब एपीआई के लिए रूटिंग टेबल पूरी तरह से अलग हैं। जबकि वाक्यविन्यास समान दिखता है, वे जिस मार्ग तालिका पर काम करते हैं वह अलग है।

हालांकि, एमवीसी कॉन्फ़िगरेशन के लिए स्थिर वस्तुओं का उपयोग करता है, इसलिए आप System.Web.Routing.RouteTable.Routes का उपयोग कर एपीआई नियंत्रक के भीतर से वैश्विक एमवीसी रूट तालिका तक पहुंच सकते हैं।

यह आपको Url.Link का उपयोग करने की अनुमति नहीं देगा, इसलिए मैं प्रारूप के लिए आपके मार्ग पंजीकरण के भीतर निरंतर उपयोग करने का सुझाव दूंगा।

+0

हाँ, सोचा कि यह मामला था ... दिलचस्प बात यह है कि आप रूटिंग टेबल का उपयोग करके एक एमवीसी व्यू के भीतर एक वेब एपीआई यूआरएल उत्पन्न कर सकते हैं ... ओह ठीक है! –

3

जहां मार्गों को खोजने के लिए की रिचर्ड्स संकेत का उपयोग करना, मैं एक साथ निम्नलिखित समारोह डाल दिया है:

// Map an MVC route within ApiController 
    private static string _MvcRouteURL(string routeName, object routeValues) 
    { 
     string mvcRouteUrl = ""; 

     // Create an HttpContextBase for the current context, used within the routing context 
     HttpContextBase httpContext = new System.Web.HttpContextWrapper(HttpContext.Current); 

     // Get the route data for the current request 
     RouteData routeData = HttpContext.Current.Request.RequestContext.RouteData; 

     // Create a new RequestContext object using the route data and context created above 
     var reqContext = new System.Web.Routing.RequestContext(httpContext, routeData); 

     // Create an Mvc UrlHelper using the new request context and the routes within the routing table 
     var helper = new System.Web.Mvc.UrlHelper(reqContext, System.Web.Routing.RouteTable.Routes); 

     // Can now use the helper to generate Url for the named route! 
     mvcRouteUrl = helper.Action(routeName, null, routeValues, HttpContext.Current.Request.Url.Scheme); 

     return mvcRouteUrl; 
    } 

यह थोड़ा कच्चा है, लेकिन मेरे लिए काम किया है, बस सोचा था कि मैं मामले में यहाँ इस डाल चाहते हैं किसी और को एक ही समस्या थी!

10

वेबएपी से एमवीसी मार्गों के लिंक उत्पन्न करने के लिए यहां एक और अधिक क्लीनर तरीका है। मैं इस विधि का उपयोग कस्टम बेस एपीआई नियंत्रक में करता हूं।

protected string MvcRoute(string routeName, object routeValues = null) 
{ 
    return new System.Web.Mvc.UrlHelper(System.Web.HttpContext.Current.Request.RequestContext) 
     .RouteUrl(routeName, routeValues, System.Web.HttpContext.Current.Request.Url.Scheme); 

} 
+0

मेरे लिए एक आकर्षण की तरह काम किया। – shaun

संबंधित मुद्दे