【问题标题】:How can I get a relative Uri for current controller action method?如何获取当前控制器操作方法的相对 Uri?
【发布时间】:2012-02-17 13:31:25
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    您可以使用以下方法获取当前操作的 someActionNamesomeControllerName 值:

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

    【讨论】:

    • 更新了答案以更直接地回答问题。
    【解决方案2】:

    使用MakeRelativeUri 方法

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

    【讨论】:

    • 我将什么作为参数传递给 MakeRelativeUri 方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2011-05-19
    相关资源
    最近更新 更多