2013-07-19 6 views
9
asp.net mvc4 के साथ काम करने

im के भीतर से इस कार्रवाई कार्रवाई करने के लिए पूर्ण URL जनरेट और मैं 'controller1' में है:एपीआई नियंत्रक

[HttpGet] 
    public async Task<string> Action1() 
    { 
     try 
     { 
      HttpClient cl = new HttpClient(); 
      string uri = "controller2/action2"; 
      HttpResponseMessage response = await cl.GetAsync(uri); 
      response.EnsureSuccessStatusCode(); 
      return response.ToString(); 
     } 
     catch 
     { 
      return null; 
     } 
    } 

जब मैं uri "http://localhost:1733/controller2/action2" करने के लिए सेट कार्रवाई ठीक काम करता है, लेकिन साथ कभी नहीं uri "नियंत्रक 2/action2" या "/ नियंत्रक 2/action2" या "~/नियंत्रक 2/action2" पर सेट है।

मैं इस क्रिया को यूरी हार्डकोड किए बिना कैसे लिख सकता हूं?

धन्यवाद।

उत्तर

14

उपयोग:

string uri = Url.Action("Action2", "Controller2", new {}, Request.Url.Scheme); 

अद्यतन:

आप एक API नियंत्रक का उपयोग और एक नियमित नियंत्रक करने के लिए एक यूआरएल उत्पन्न करने के लिए की जरूरत है कर रहे हैं, आप करने वाले हैं उपयोग करने के लिए:

string uri = this.Url.Link("Default", new { controller = "Controller2", action = "Action2" }); 

जहां Default आपके पंजीकृत मार्ग संग्रह में परिभाषित route का नाम है, या यदि आप इस क्रिया के लिए पहले से ही एक विशिष्ट मार्ग बनाया है, इसका नाम और new{} दूसरे पैरामीटर के रूप में उपयोग करें।

एमवीसी संस्करण 4 के लिए, ~/App_Start/RoutesConfig.cs पर अपने पंजीकृत मार्गों की जांच करें। एमवीसी संस्करण 3 के लिए, अपने Global.asax में अपनी RegisterRoutes विधि देखें।

+2

'System.Web.Http.Routing.UrlHelper' में 'एक्शन' की परिभाषा नहीं है और 'System.Web.Http.Routing.UrlHelper' प्रकार के पहले तर्क को स्वीकार करने वाली कोई एक्सटेंशन विधि 'एक्शन' नहीं मिल सकती है (क्या आप एक प्रयोग निर्देश या असेंबली संदर्भ खो रहे हैं?) – dafriskymonkey

+0

क्या मुझे कुछ संदर्भ याद आ रही है? – dafriskymonkey

+1

वह क्रिया जिसे आप पूर्ण यूआरएल उत्पन्न करना चाहते हैं, क्या यह वेबएपी विधि या नियमित नियंत्रक कार्रवाई है? – haim770

12

एक और, शायद सरल जवाब है, अपने WebAPI कक्षा में UrlHelper का एक उदाहरण बनाने के लिए है:

वर्तमान अनुरोध संदर्भ में
var url = new UrlHelper(System.Web.HttpContext.Current.Request.RequestContext); 
item.Url = url.Action("Doc", "Editor", new {id=1}); 

दर्रे और आप सोने कर रहे हैं।

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