2012-02-29 15 views

उत्तर

123

ApiController में Url नामक एक संपत्ति है जो System.Web.Http.Routing.UrlHelper प्रकार है जो आपको एपीआई नियंत्रकों के लिए यूआरएल बनाने की अनुमति देती है।

उदाहरण:

public class ValuesController : ApiController 
{ 
    // GET /api/values 
    public IEnumerable<string> Get() 
    { 
     // returns /api/values/123 
     string url = Url.Route("DefaultApi", new { controller = "values", id = "123" }); 
     return new string[] { "value1", "value2" }; 
    } 

    // GET /api/values/5 
    public string Get(int id) 
    { 
     return "value"; 
    } 

    ... 
} 

न अपने विचारों में है और न ही मानक नियंत्रकों में यह UrlHelper मौजूद नहीं है।


अद्यतन:

और आदेश में एक ApiController के मार्ग के बाहर तुम कर सकते हो करने के लिए निम्नलिखित:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     string url = Url.RouteUrl(
      "DefaultApi", 
      new { httproute = "", controller = "values", id = "123" } 
     ); 
     return View(); 
    } 
} 

या एक दृश्य के अंदर:

<script type="text/javascript"> 
    var url = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "values", id = "123" })'; 
    $.ajax({ 
     url: url, 
     type: 'GET', 
     success: function(result) { 
      // ... 
     } 
    }); 
</script> 

सूचना httproute = "" मार्ग टोकन जो महत्वपूर्ण है।

जाहिर है इस मानता है कि अपने एपीआई मार्ग Global.asax में अपने RegisterRoutes विधि में DefaultApi कहा जाता है:

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

वह .. वास्तव में मेरी मदद नहीं करता है क्योंकि मुझे सुरक्षित रूप से यूआरएल उत्पन्न करने में सक्षम होने के लिए मेरे दृश्य की आवश्यकता है। यदि कोई लाइव लाइव लाइसेंस है तो दृश्य पर यूआरएल बनाने के लिए 'गो लाइव' तरीका क्या है? –

+0

अधिक महत्वपूर्ण बात यह काम नहीं करेगी यदि आप ASP.Net विकास सर्वर का उपयोग कर रहे हैं क्योंकि यह हर समय बंदरगाहों को बदलता है ताकि आप दृश्य में यूआरएल को कट्टर भी नहीं कर सकें। –

+0

@ShaneCourtrille, मैंने यह जवाब देने के लिए अपना उत्तर अपडेट किया है कि आप HttpControllerContext के बाहर एपी मार्ग उत्पन्न करने के लिए सामान्य 'System.Web.Mvc.UrlHelper' का उपयोग कैसे कर सकते हैं। –

41

यह Url.Action की सरल फार्म के साथ काम करता है इस प्रकार आप किसी भी रूटिंग नाम को संदर्भित करने की जरूरत नहीं है:

Url.Action("ActionName", "ControllerName", new { httproute = "DefaultApi" }) 

यदि आप किसी क्षेत्र में यूआरएल की आवश्यकता है तो आप area = "" जोड़ना चाहेंगे। (एपीआई नियंत्रक डिफ़ॉल्ट रूप से एरिया के बाहर हैं।) मैं एमवीसी का उपयोग कर रहा हूं 4.

+7

वेब एपी में UrlHelper http: // msdn है।microsoft.com/en-us/library/system.web.http.routing.urlhelper(v=vs.108).aspx, इसमें कोई क्रिया विधि नहीं है। –

+6

@YuriyFaktorovich इस पोस्ट का तात्पर्य है कि एक दृश्य से 'Url.Action' का उपयोग किया जा रहा है। 'Url' प्रकार 'System.Web.Mvc.UrlHelper' है, और यह' वेबएपी 'मार्गों पर मैप नहीं करता है। यही कारण है कि आपको अतिरिक्त पैरामीटर की आवश्यकता है: 'new {httproute =" "}}। – Jesse

+3

मैंने 'httproute" जोड़ा है "लेकिन यह मैपिंग नहीं है =/ – Maslow

4

हार्डकोडेड स्ट्रिंग्स (नियंत्रक नाम) के बिना, टाइपएफ़ तरीके से लिंक जेनरेट करने में सक्षम होना चाहते हैं?

इसके लिए एक नजदीक है!हमेशा की तरह

मार्गों: इस तरह (और यह मार्क सीमैन से लिखा है)

https://github.com/ploeh/Hyprlinkr

वर्क्स

var linker = new RouteLinker(request); 
var uri = linker.GetUri<FooController>(r => r.GetById(1337)); 

परिणाम:

name: "API Default", 
routeTemplate: "api/{controller}/{id}", 
defaults: new { id = RouteParameter.Optional } 

एक URL प्राप्त करें:

इस कोड है कि आप एपीआई के लिए एक यूआरएल पाने के लिए एक MVC नियंत्रक यूआरएल

@Url.Action("Edit", "MyController") 

बनाने के लिए आदेश में प्रयोग करेंगे तो

:

http://localhost/api/foo/1337 
0

यहाँ सवाल का जवाब देने के लिए KISS विधि है नियंत्रक के संस्करण (यह मानते हुए कि आप एक ही नियंत्रक नाम का उपयोग करें) का उपयोग कर सकते

@Url.Action("Edit", "api/MyController") 

सभी Url.Action विधि कर रही है आवेदन के रूट पथ जोड़कर किया जाता है, ग के साथ ऑनरोलर नाम, उसके बाद कार्रवाई का नाम (जब तक कि यह "इंडेक्स" न हो, जिस स्थिति में इसे शामिल नहीं किया जाता है। यदि मार्ग मान ऑब्जेक्ट में एक आईडी प्रॉपर्टी है तो मान भी यूआरएल में जोड़ा जाता है।