249 votes

Comment pour trouver l’url absolue d’une action dans ASP.NET MVC ?

J’ai besoin de faire quelque chose comme ceci :

J’utilise la version Beta de MVC, mais je ne peux pas comprendre comment obtenir l’url absolue d’une action. Je voudrais faire quelque chose comme ceci :

Y a-t-il une aide ou une méthode de Page pour cela ?

495voto

Adam Boddington Points 3438

Cliquez ici pour plus d'informations, mais il n'y a pas besoin de méthodes d'extension. Il est déjà cuit, mais pas de manière très intuitive.

 Url.Action("Action", null, null, Request.Url.Scheme);
 

74voto

Charlino Points 11217

Mieux encore, étendez le UrlHelper - doh!

 namespace System.Web.Mvc
{
    public static class HtmlExtensions
    {
        public static string AbsoluteAction(this UrlHelper url, string action, string controller)
        {
            Uri requestUrl = url.RequestContext.HttpContext.Request.Url;

            string absoluteAction = string.Format("{0}://{1}{2}",
                                                  requestUrl.Scheme,
                                                  requestUrl.Authority,
                                                  url.Action(action, controller));

            return absoluteAction;
        }
    }
}
 

Alors appelez comme ça

 <%= Url.AbsoluteAction("Dashboard", "Account")%>
 

:-)

26voto

Ryan Sampson Points 2898
<%= Url.Action("About", "Home", null, Request.Url.Scheme) %>
<%= Url.RouteUrl("Default", new { Action = "About" }, Request.Url.Scheme) %>

21voto

81bronco Points 7071

En utilisant la réponse de @Charlino comme guide, j'ai trouvé cela.

La documentation ASP.NET MVC pour UrlHelper montre que Url.Action renverra une URL complète si un nom d'hôte et un protocole sont transmis. J'ai créé ces aides pour forcer le nom d'hôte et le protocole à fournir. Les multiples surcharges reflètent les surcharges pour 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);
            }

        }
    }
 

3voto

Charlino Points 11217

Je ne suis pas sûr s'il y a une manière intégrée de le faire, mais vous pouvez rouler votre propre méthode HtmlHelper.

Quelque chose comme le suivant

 namespace System.Web.Mvc
{
    public static class HtmlExtensions
    {
        public static string AbsoluteAction(this HtmlHelper html, string actionUrl)
        {
            Uri requestUrl = html.ViewContext.HttpContext.Request.Url;

            string absoluteAction = string.Format("{0}://{1}{2}",
                                                  requestUrl.Scheme,
                                                  requestUrl.Authority,
                                                  actionUrl);

            return absoluteAction;
        }
    }
}
 

Alors appelez comme ça

 <%= Html.AbsoluteAction(Url.Action("Dashboard", "Account"))%> »
 

HTHs, Charles

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X