ASP.NET MVC:路由到URL

4
什么是MVC中获取路由URL(相对或绝对)的最简单方法?我在SO上看到了这段代码,但它似乎有些冗长,并没有枚举RouteTable。
示例:
List<string> urlList = new List<string>();
urlList.Add(GetUrl(new { controller = "Help", action = "Edit" }));
urlList.Add(GetUrl(new { controller = "Help", action = "Create" }));
urlList.Add(GetUrl(new { controller = "About", action = "Company" }));
urlList.Add(GetUrl(new { controller = "About", action = "Management" }));

使用:

protected string GetUrl(object routeValues)
{
    RouteValueDictionary values = new RouteValueDictionary(routeValues);
    RequestContext context = new RequestContext(HttpContext, RouteData);

    string url = RouteTable.Routes.GetVirtualPath(context, values).VirtualPath;

    return new Uri(Request.Url, url).AbsoluteUri;
}

如何更好地查看RouteTable并获取给定控制器和操作的URL?


如果您在操作内部,可以使用UrlAction助手http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.action.aspx - Roman
2个回答

7
使用UrlHelper类:http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.aspx 您可以通过控制器中的Url对象使用它。要映射到一个操作,请使用Action方法:Url.Action("actionName","controllerName");。这里有Action方法的完整重载列表:http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.action.aspx 因此,您的代码应该如下所示:
        List<string> urlList = new List<string>();
        urlList.Add(Url.Action("Edit", "Help"));
        urlList.Add(Url.Action("Create", "Help"));
        urlList.Add(Url.Action("Company", "About"));
        urlList.Add(Url.Action("Management", "About"));

编辑:从你的新回答中看来,你想要构建一个网站地图。

可以查看这个Codeplex项目:http://mvcsitemap.codeplex.com/。我自己没有使用过它,但它看起来相当可靠。


1

在控制器中怎么样:

    public IEnumerable<SiteMapEntry> SiteMapEntries
    {
        get
        {
            var entries = new List<SiteMapEntry>();

            foreach (var route in this.Routes)
            {
                entries.Add(new SiteMapEntry
                (
                    this.Url.RouteUrl(route.Defaults),
                    SiteMapEntry.ChangeFrequency.Weekly,
                    DateTime.Now,
                    1F));
            }

            return entries;
        }
    }

当控制器具有成员时:

public IEnumerable<Route> Routes

请注意:

this.Url.RouteUrl(route.Defaults)

只是顺便提一下,建议您实际编辑原始问题而不是发布新答案(除非它是实际答案)。 - Alastair Pitts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接