2010-04-23 195 views
0

我可以看到一個能夠編譯這段代碼的例子嗎?ASP.NET MVC路由

public IEnumerable<RouteBase> Routes 
    { 
     get 
     { 
      return new List<Route>() 
      { 
       new Route(...) 
      } 
     } 
    } 

如果RouteCollection.MapRoute()不存在,您會怎麼做?

我想把我的控制器負責映射路由,而不是Global.asax.cs。 public IEnumerable<RouteBase> Routes是我的控制器的成員。如果控制器負責路由,則通過使用中的單獨硬編碼URL在Global.asax.cs中解耦路由是個壞主意。

在回答哈維先生:

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     RouteTable.Routes.Include(new RootController()); 
    } 
} 

public static class RouteCollectionExtension 
{ 
    public static RouteCollection Include(this RouteCollection routes, IRoutedController controller) 
    { 
     foreach (var route in controller.Routes) 
     { 
      routes.Add(route); 
     } 

     return routes; 
    } 
} 

和:

public class RootController : Controller, IRoutedController 
{ 
    public ActionResult Index() 
    { 
     ViewData["Message"] = "Welcome to ASP.NET MVC!"; 

     return View(); 
    } 

    public IEnumerable<RouteBase> Routes 
    { 
     get 
     { 
      return new List<Route>() 
      { 
       new Route("{controller}/{action}/{id}", ...?!?) 
      }; 
     } 
    } 
} 
+0

這不是雞和雞蛋的問題嗎?如果控制器方法從不執行(路由引擎執行控制器方法,因此至少需要一條現有路由來執行此操作),它將如何設置路由? – 2010-04-23 05:00:31

+0

也許吧。 :)## – MVCDummy09 2010-04-23 05:09:00

+0

不知道該編輯是否針對我。控制器不負責路由,路由引擎是。我很佩服你的韌性,但你仍然沒有解釋如何執行控制器方法,所以你可以設置一些路由,如果路由引擎沒有預定義的路由,因此無法執行控制器方法。 – 2010-04-23 05:10:07

回答

2

嚇到我在這個崗位的一條線是在下列

我想把我的控制器放在 負責映射路線

asp.net mvc背後的想法是明確的關注點。由於控制器不再僅僅是控制而是干涉路線,這將殺死控制器的可測試性。