2013-07-19 17 views
9

IM與asp.net mvc4工作中產生絕對URL的行動,我必須在「控制器1」這個動作:從AP控制器

[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設置爲「controller2/action2」或「/ controller2/action2」或「〜/ controller2/action2」。

我該怎麼寫這個動作而沒有對uri進行硬編碼?

謝謝。

回答

14

用途:

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

更新:

由於您使用的API控制器和需要生成一個URL到正規的控制器,你得使用方法:

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

其中Default是在您的註冊路線集合中定義的route的名稱,或者如果您已經爲此操作創建了特定路線,請使用它的名稱和new{}作爲第二個參數。

對於MVC版本4,請在~/App_Start/RoutesConfig.cs檢查您的註冊路線。對於MVC版本3,請在您的Global.asax中檢查您的RegisterRoutes方法。

+2

'System.Web.Http.Routing.UrlHelper'沒有包含'Action'的定義,也沒有找到接受'System.Web.Http.Routing.UrlHelper'類型的第一個參數的擴展方法'Action' (你是否缺少使用指令或程序集引用?) – dafriskymonkey

+0

即時通訊缺少一些參考? – dafriskymonkey

+1

您想要生成絕對Url的操作是WebApi方法還是常規控制器操作? – haim770

12

另一個,也許是更簡單的答案,在你的WebAPI類創建UrlHelper的一個實例:

var url = new UrlHelper(System.Web.HttpContext.Current.Request.RequestContext); 
item.Url = url.Action("Doc", "Editor", new {id=1}); 

通在當前的請求上下文,你是金。