Asp MVC Action链接绝对URL

时间:2010-10-05 13:25:38

标签: c# asp.net-mvc

我有一组显示给特定用户的视图。这些是我从我们的应用程序中的其他视图中复制的视图,并稍微更改了它们。

在这些视图中我使用的是Html.Action链接,但是我需要这些链接来返回绝对网址而不是相对网址。我知道有额外的参数可以用来获得这种效果,但是我并不认为可以改变我所有观点中的所有链接。

理想情况下,我想在一个地方进行更改,并根据需要渲染所有链接。当然必须有我可以设置的东西,或者我可以覆盖的功能来实现这一目标。

2 个答案:

答案 0 :(得分:11)

我写了一篇名为How to build absolute action URLs using the UrlHelper class的博文,其中我提出了一个名为AbsoluteAction的自定义扩展方法。我鼓励你看一下!

/// <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);
}

ASP.NET MVC包含用于生成绝对URL的内置功能,但不是非常直观。

UrlHelper.Action()方法有几种重载使您能够传递其他参数,例如路由值,要使用的协议以及URL的主机名。如果您使用任何允许您指定protocol参数的重载,则生成的URL将是绝对的。因此,以下代码可用于为 HomeController 关于操作方法生成绝对URL:

@Url.Action("About", "Home", null, "http")

答案 1 :(得分:2)

您可以创建一个名为Html.AbsoluteAction的新扩展方法。 AbsoluteAction可以添加使URL绝对所需的额外参数,因此您只需在自定义扩展方法中编写一次该代码。