2012-02-17 54 views
1

我試圖用這個UrlHelper擴展方法:如何獲取當前控制器操作方法的相對Uri?

public static string ToPublicUrl(this UrlHelper urlHelper, Uri relativeUri) 
{ 
    var httpContext = urlHelper.RequestContext.HttpContext; 

    var uriBuilder = new UriBuilder 
    { 
      Host = httpContext.Request.Url.Host, 
      Path = "/", 
      Port = 80, 
      Scheme = "http", 
    }; 

    if (httpContext.Request.IsLocal) 
    { 
     uriBuilder.Port = httpContext.Request.Url.Port; 
    } 

    return new Uri(uriBuilder.Uri, relativeUri).AbsoluteUri; 
} 

此收作方法初探需要一個相對URI參數。我想打電話給一個控制器的動作中這個方法,我無法弄清楚如何獲得一個相對URI當前操作

有人能指出我在正確的方向?

回答

1

你可以使用基於特定動作名稱的相對路徑:

urlHelper.Action("someActionName" /*, "someControllerName" */); 

,你可以得到的someActionNamesomeControllerName值對於現在的行動:

ViewContext.Controller.ValueProvider["action"].RawValue 
ViewContext.Controller.ValueProvider["controller"].RawValue 
+0

已更新的答案可以更直接地回答問題。 – 2012-02-17 13:59:31

0

使用MakeRelativeUri方法

Uri result= uriBuilder.Uri.MakeRelativeUri(relativeUri); 
return result.ToString() 
+0

我作爲參數傳遞給MakeRelativeUri方法是什麼? – stephen776 2012-02-17 13:44:30

相關問題