我需要生成一个动作链接并通过电子邮件发送链接。我想打电话给这样的话:
public string GetAbsolutePath(string actionName, string controllerName, string id)
{
// Somehow generate the absolute path
}
我想我可以使用VirtualPathUtility.ToAbsolute(string virtualPath),但我不知道如何获取虚拟路径。
答案 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);