Como faço para encontrar o caminho absoluto de uma ação do controlador?

votos
2

Eu preciso gerar um link para uma ação e enviar o link por e-mail. Eu gostaria de chamar algo como isto:

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

Eu acho que eu posso usar VirtualPathUtility.ToAbsolute (string virtualPath), mas eu não tenho certeza de como obter o caminho virtual também.

Publicado 27/08/2009 em 06:00
fonte usuário
Em outras línguas...                            


4 respostas

votos
1

Eu acabei com isso:

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;
}
Respondeu 02/09/2010 em 05:23
fonte usuário

votos
1

Algo assim:

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;
}
Respondeu 27/08/2009 em 06:47
fonte usuário

votos
1

Você pode usar o mecanismo de roteamento para gerar o link para você. Existem várias maneiras de fazer isso, por exemplo, no modo de exibição que você pode gerar um link para uma ação com

<%= Url.Action(actionName, controllerName, new {id=id} %>
Respondeu 27/08/2009 em 06:16
fonte usuário

votos
0

Você pode usar o mecanismo de roteamento para gerar a rota para você dado o controlador e ação. A propriedade RouteCollection do seu controlador pode ser usado da seguinte forma:

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

string url = VirtualPathUtility.ToAbsolute(virtualPath);
Respondeu 27/08/2009 em 07:01
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more