gpt4 book ai didi

asp.net-mvc - RouteTable.Routes RouteCollection?

转载 作者:行者123 更新时间:2023-12-02 01:29:52 25 4
gpt4 key购买 nike

我随处看到的 MVC 风格路由的示例是这样的:

void Application_Start(object sender, EventArgs e) 
{
RegisterRoutes(RouteTable.Routes);
}

public static void RegisterRoutes(RouteCollection routes)
{
routes.Add(new Route
(
"Category/{action}/{categoryName}"
, new CategoryRouteHandler()
));
}

将 RouteTable.Routes 集合传递给 RegisterRoutes() 的原因是什么?为什么不只是:

void Application_Start(object sender, EventArgs e) 
{
RegisterRoutes();
}

public static void RegisterRoutes()
{
RouteTable.Routes.Add(new Route
(
"Category/{action}/{categoryName}"
, new CategoryRouteHandler()
));
}

除了 RouteTable.Routes 之外,还会将路由添加到哪些 RouteCollection? RouteTable.Routes 不是 Web 应用程序的 RouteCollection 吗?

我有一个特定的 IRouteHandler,它有一个 Map() 方法:

public class ChatRouteHandler : IRouteHandler
{
private static bool mapped;

public void Map()
{
if (!ChatRouteHandler.mapped)
{
RouteTable.Routes.Add
(
new Route("chat/{room}/{date}",
new ChatRouteHandler())
);
}
}

Map() 应该接受 RouteCollection 而不是添加到 RouteTable.Routes 集合中是否有原因?再说一次,这个 IRouteHandler 会被添加到什么其他 RouteCollection 中?

最佳答案

单元测试。

通过从 RouteTable.Routes 解耦(通过参数传递)注册,您可以选择在单元测试中使用哪个 RouteCollection 进行注册。

恕我直言,在任何地方编写routes.Add()而不是RouteTable.Routes.Add()也更好。

“Map() 应该接受 RouteCollection 而不是添加到 RouteTable.Routes 集合中是否有原因?”

我将这个问题解释为“为什么 RouteCollection 没有 MapRoute 方法,而不是扩展方法?”。是的,RouteCollection 在 System.WEb.Routing 中,而 MapRoute 扩展方法在 System.Web.Mvc 中。 MapRoute() 依赖于 MvcHandler,而 System.Web.Routing 对此一无所知。

关于asp.net-mvc - RouteTable.Routes RouteCollection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/696000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com