2012-02-17 57 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

相关问题