我是ASP.NET MVC的新手,我正在尝试在视图中工作时获取完整的url。我需要将此作为回调提交给第三方API。例如,我需要的是
当我使用
时<%= Url.Action("action", "controller") %>
我得到了
/控制器/动作
我知道有几种方法可以将服务器基本路径添加到此,但我想知道在ASP.NET MVC视图中执行此操作的首选方法是什么?
编辑:只是为了澄清,它不是当前视图/动作的URL,它是同一个控制器中的另一个动作。
答案 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%>