2009-08-27 22 views
2

Ich muss einen Link zu einer Aktion generieren und den Link per E-Mail senden. Ich möchte so etwas nennen:Wie finde ich den absoluten Pfad einer Controller-Aktion?

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

Ich glaube, ich VirtualPathUtility.ToAbsolute (string virtualPath) verwenden kann, aber ich bin nicht sicher, wie entweder den virtuellen Pfad zu bekommen.

Antwort

1

ich damit endete:

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

Sie können den Routing-Mechanismus verwenden, um den Link für Sie zu generieren. Es gibt mehrere Möglichkeiten, dies zu tun, z.B. in der Ansicht können Sie einen Link zu einer Aktion mit

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

Etwas Ähnliches erzeugen:

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

Sie die Routing-Engine die Strecke zu erzeugen, damit Sie die Controller und die Aktion gegeben verwenden können. Die Routecollection Eigenschaft des Controllers kann wie folgt verwendet werden:

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

string url = VirtualPathUtility.ToAbsolute(virtualPath); 
Verwandte Themen