2010-05-11 208 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/。我自己並沒有使用它,但它看起來很穩固。