如何找到控制器动作的绝对路径?

时间:2009-08-27 05:00:39

标签: c# asp.net-mvc

我需要生成一个动作链接并通过电子邮件发送链接。我想打电话给这样的话:

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

我想我可以使用VirtualPathUtility.ToAbsolute(string virtualPath),但我不知道如何获取虚拟路径。

4 个答案:

答案 0 :(得分:2)

这样的事情:

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;
}

答案 1 :(得分:1)

您可以使用路由机制为您生成链接。有几种方法可以做到这一点,例如在视图中,您可以使用

生成指向操作的链接
<%= Url.Action(actionName, controllerName, new {id=id} %>

答案 2 :(得分:1)

我最终得到了这个:

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;
}

答案 3 :(得分:0)

在给定控制器和操作的情况下,您可以使用路由引擎为您生成路径。控制器的RouteCollection属性可以如下使用:

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

string url = VirtualPathUtility.ToAbsolute(virtualPath);