在ASP.NET MVC中获取动作的完整URL
这个问题在这里已经有了答案:
Url.Action有一个重载,它将所需的协议(例如http,https)作为参数 - 如果指定了此参数,则会获得完全限定的URL。
以下是一个在操作方法中使用当前请求协议的示例:
var fullUrl = this.Url.Action("Edit", "Posts", new { id = 5 }, this.Request.Url.Scheme);
HtmlHelper(@Html)也有一个ActionLink方法的重载,您可以在剃刀中使用该方法创建锚点元素,但它也需要hostName和fragment参数。 所以我只是选择再次使用@ Url.Action:
<span>
Copy
<a href='@Url.Action("About", "Home", null, Request.Url.Scheme)'>this link</a>
and post it anywhere on the internet!
</span>
正如Paddy所说: 如果您使用显式指定要使用的协议的UrlHelper.Action()
的重载,则生成的URL将是绝对的并且是完全限定的,而不是相对的。
我写了一篇名为“如何使用UrlHelper类构建绝对操作URL”的博客文章,其中我建议为了可读性而编写自定义扩展方法:
/// <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);
}
然后,您可以在视图中使用它:
@Url.AbsoluteAction("Action", "Controller")
这是你需要做的。
@Url.Action(action,controller, null, Request.Url.Scheme)
链接地址: http://www.djcxy.com/p/55697.html