在ASP.NET MVC视图中获取完整服务器路径的首选方法是什么?

时间:2008-12-06 22:35:29

标签: asp.net-mvc

我是ASP.NET MVC的新手,我正在尝试在视图中工作时获取完整的url。我需要将此作为回调提交给第三方API。例如,我需要的是

  

http://myserver.com/controller/action

当我使用

<%= Url.Action("action", "controller") %>

我得到了

  

/控制器/动作

我知道有几种方法可以将服务器基本路径添加到此,但我想知道在ASP.NET MVC视图中执行此操作的首选方法是什么?

编辑:只是为了澄清,它不是当前视图/动作的URL,它是同一个控制器中的另一个动作。

4 个答案:

答案 0 :(得分:20)

为了捕捉协议(http / https),不同端口和虚拟路径的变化(不能总是假设我们将在服务器根目录中),我最终得到了以下解决方案:

<%= Request.Url.GetLeftPart(System.UriPartial.Authority) + Url.Action("action", "controller")%>

我正在努力将其转移到扩展方法,以使其更漂亮。

答案 1 :(得分:3)

编辑:对于任何视图/控制器组合,不确定你会发现比这更简单的东西。

http://<%=Request.Url.Host %><%=Url.Action("action", "controller")%>

答案 2 :(得分:2)

我写了一篇关于完整路径生成的博客文章,名为How to build absolute action URLs using the UrlHelper class。你肯定想要检查一下!


这是我建议写的扩展名:

/// <summary>
/// Generates a fully qualified URL to an action method by using
/// the specified action name, controller name and route values.
/// </summary>
/// <param name="url">The URL helper.</param>
/// <param name="actionName">The name of the action method.</param>
/// <param name="controllerName">The name of the controller.</param>
/// <param name="routeValues">The route values.</param>
/// <returns>The absolute URL.</returns>
public static string AbsoluteAction(this UrlHelper url,
    string actionName, string controllerName, object routeValues = null)
{
    string scheme = url.RequestContext.HttpContext.Request.Url.Scheme;

    return url.Action(actionName, controllerName, routeValues, scheme);
}

答案 3 :(得分:0)

Request.Url返回完整的URL,包括协议(http://),url(www.mydomain.com/mypath)和查询字符串(?id = 5)。

@Request.Url       @*Razor tags*@

对于经典的ASP.NET MVC标记,它将是

<%=Request.Url%>   <%'Classic tags%>