在ASP.NET MVC中获取动作的完整URL

这个问题在这里已经有了答案:

  • 如何在ASP.NET MVC中查找动作的绝对URL? 9个答案

  • 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

    上一篇: Getting full URL of action in ASP.NET MVC

    下一篇: How can I get my webapp's base URL in ASP.NET MVC?