2009-08-27 8 views
2

Je dois générer un lien vers une action et envoyer le lien par email. Je voudrais appeler quelque chose comme ceci:Comment trouver le chemin absolu d'une action du contrôleur?

public string GetAbsolutePath(string actionName, string controllerName, string id) 
{ 
    // Somehow generate the absolute path 
} 

Je pense que je peux utiliser VirtualPathUtility.ToAbsolute (string virtualPath) mais je ne suis pas sûr comment obtenir soit le chemin virtuel.

Répondre

1

J'ai fini avec ceci:

public static string AbsoluteAction(this UrlHelper url, string action, string controller, object routeValues) 
{ 
    Uri requestUrl = url.RequestContext.HttpContext.Request.Url; 

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

Vous pouvez utiliser le mécanisme de routage pour générer le lien pour vous. Il y a plusieurs façons de le faire, par ex. dans la vue que vous pouvez générer un lien vers une action avec

<%= Url.Action(actionName, controllerName, new {id=id} %> 
1

Quelque chose comme ceci:

public string GetAbsolutePath(string actionName, string controllerName, string id) 
{ 
    var relUrl = Url.RouteUrl(new { controller = controllerName, action = actionName, id = id }); 

    return Request.Url.GetLeftPart(UriPartial.Authority).TrimEnd('/') + relUrl; 
} 
0

Vous pouvez utiliser le moteur de routage pour générer l'itinéraire pour vous donné le contrôleur et l'action. La propriété RouteCollection de votre contrôleur peut être utilisé comme suit:

string virtualPath = 
    RouteCollection.GetVirtualPath(context, new { 
                action = actionName, 
                controller = controllerName, 
                id = id 
               } 
           ).VirtualPath; 

string url = VirtualPathUtility.ToAbsolute(virtualPath); 
Questions connexes