我为此编写了一个针对MVC 5的帮助程序类。它非常灵活,如果您不在控制器内部时需要此功能,则它特别有用。您应该能够将其直接放入项目并继续。
正如Meligy指出的那样,关键是要包括协议。在这里,我将其硬编码为http,因此,如果要使用SSL,可能需要变得更加灵活。
public class AbsoluteUrlHelper
{
public static string GetAbsoluteUrl(string action, object routeValues = null)
{
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
var values = urlHelper.RequestContext.RouteData.Values;
var controller = values["controller"].ToString();
return GetAbsoluteUrl(action, controller, urlHelper, routeValues);
}
public static string GetAbsoluteUrl(string action, string controller, object routeValues = null)
{
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
return GetAbsoluteUrl(action, controller, urlHelper, routeValues);
}
public static string GetAbsoluteUrl(string action, string controller, UrlHelper urlHelper, object routeValues = null)
{
var uri = urlHelper.Action(action, controller, routeValues, "http");
return uri;
}
}