2010-05-11 210 views
4

在MVC中获取URL(相对或绝对)到路由的最简单方法是什么?我在这里看到了这个代码,但它看起来有点冗长,并没有枚举RouteTable。ASP.NET MVC:路由到URL

例子:

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并获得一个给定的控制器和动作网址?

+0

如果你是一个动作内有UrlAction帮手http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.action.aspx – R0MANARMY 2010-05-11 04:33:33

回答

0

这个怎么样(控制器):

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) 
+0

就像一个asid即建议您实际编辑原始问题,而不是发布新答案(除非是实际答案) – 2010-05-11 04:53:26

+0

太棒了!这是我正在寻找的。谢谢! – 2012-12-22 22:01:21

7

使用UrlHelper类:http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.aspx

你应该能够在你的控制器通过Url对象使用它。要映射到某个操作,请使用Action方法:Url.Action("actionName","controllerName");。 重载的Action方法的完整列表在这里:

所以你的代码应该是这样的:

 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/。我自己并没有使用它,但它看起来很稳固。