Mit @Charlino ‚s Antwort als Leitfaden, ich kam auf diese Idee.
Die ASP.NET MVC documentation for UrlHelper zeigt, dass Url.Action eine voll qualifizierte URL zurückgibt, wenn ein Hostname und ein Protokoll übergeben werden. Ich erstellte diese Helfer, um den Hostnamen und das Protokoll zu erzwingen. Die mehrfachen Überlastungen spiegeln die Überlastung für 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);
}
}
}
Interessant, also, wenn Sie das Protokoll angeben, ist die URL absolut – Casebash
Diese Antwort ist die bessere, auf diese Weise kann Resharper noch validieren, dass die Aktion und Controller vorhanden ist. Ich würde die Verwendung von Request.Url.Scheme anstelle von http vorschlagen, auf diese Weise http und https werden beide unterstützt. – Pbirkoff
@Pbirkoff, stimmen Sie zu, dass dies die beste Antwort ist, aber Sie möchten vielleicht wissen, dass Sie Ihre eigenen Methoden für ReSharper mit Anmerkungen versehen können, um zu wissen, dass Parameter Aktionen/Controller darstellen. Auf diese Weise kann R # die von Ihnen bereitgestellten Strings immer noch validieren, da dies sehr gut funktioniert. –