Usando @Charlino 's respuesta como una guía, se me ocurrió esto.
El ASP.NET MVC documentation for UrlHelper muestra que Url.Action devolverá un Url totalmente calificado si se pasan un nombre de host y protocolo. Creé estos helpers para forzar que se proporcionen el nombre de host y el protocolo. Las múltiples sobrecargas reflejan las sobrecargas de Url.Action:
using System.Web.Routing;
namespace System.Web.Mvc {
public static class HtmlExtensions {
public static string AbsoluteAction(this UrlHelper url, string actionName) {
Uri requestUrl = url.RequestContext.HttpContext.Request.Url;
return url.Action(actionName, null, (RouteValueDictionary)null,
requestUrl.Scheme, null);
}
public static string AbsoluteAction(this UrlHelper url, string actionName,
object routeValues) {
Uri requestUrl = url.RequestContext.HttpContext.Request.Url;
return url.Action(actionName, null, new RouteValueDictionary(routeValues),
requestUrl.Scheme, null);
}
public static string AbsoluteAction(this UrlHelper url, string actionName,
RouteValueDictionary routeValues) {
Uri requestUrl = url.RequestContext.HttpContext.Request.Url;
return url.Action(actionName, null, routeValues, requestUrl.Scheme, null);
}
public static string AbsoluteAction(this UrlHelper url, string actionName,
string controllerName) {
Uri requestUrl = url.RequestContext.HttpContext.Request.Url;
return url.Action(actionName, controllerName, (RouteValueDictionary)null,
requestUrl.Scheme, null);
}
public static string AbsoluteAction(this UrlHelper url, string actionName,
string controllerName,
object routeValues) {
Uri requestUrl = url.RequestContext.HttpContext.Request.Url;
return url.Action(actionName, controllerName,
new RouteValueDictionary(routeValues), requestUrl.Scheme,
null);
}
public static string AbsoluteAction(this UrlHelper url, string actionName,
string controllerName,
RouteValueDictionary routeValues) {
Uri requestUrl = url.RequestContext.HttpContext.Request.Url;
return url.Action(actionName, controllerName, routeValues, requestUrl.Scheme,
null);
}
public static string AbsoluteAction(this UrlHelper url, string actionName,
string controllerName, object routeValues,
string protocol) {
Uri requestUrl = url.RequestContext.HttpContext.Request.Url;
return url.Action(actionName, controllerName,
new RouteValueDictionary(routeValues), protocol, null);
}
}
}
Interesante, así que si especifica el protocolo, la URL es absoluta – Casebash
Esta respuesta es la mejor, de esta manera Resharper aún puede validar que existe la Acción y el Controlador. Yo sugeriría el uso de Request.Url.Scheme en lugar de http, de esa manera tanto http como https son compatibles. – Pbirkoff
@Pbirkoff, acepta que esta es la mejor respuesta, pero le gustaría saber que puede anotar sus propios métodos para que ReSharper sepa que los parámetros representan acciones/controladores. De esa forma, R # aún puede validar las cadenas que usted proporciona, ya que lo hace muy bien. –