如何获得当前控制器操作方法的相对Uri?

时间:2012-02-17 13:31:26

标签: c# asp.net .net asp.net-mvc asp.net-mvc-3

我正在尝试使用此UrlHelper扩展方法:

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作为参数。我试图在控制器动作中调用此方法,我无法弄清楚如何获取当前Action的相对Uri

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

您可以使用以下命令获取基于特定操作名称的相对路径:

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

您可以使用以下命令获取当前操作的 someActionName someControllerName 值:

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

答案 1 :(得分:0)

使用MakeRelativeUri方法

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