MVC启动第二个会话时路由如何执行?路由表是否会重复创建?
结论
路由表只会在应用启动阶段创建一次,不会随每个新用户的新会话重新创建。
具体原理
Application_Start()是ASP.NET框架提供的应用生命周期事件,触发时机是应用进程启动后接收到第一个用户请求时,且在整个应用进程的运行生命周期内,这个方法仅会被执行一次。- MVC默认会在
Application_Start()中调用RegisterRoutes()方法,执行完成后生成的路由规则会被存入RouteTable.Routes这个全局静态集合,是整个应用所有请求共享的配置,所有后续用户的所有请求做路由匹配时,都是读取这个全局集合的规则,不会单独为每个会话/用户生成新的路由表。
什么情况会重新生成路由表?
只有当应用进程重启时,才会重新触发Application_Start()执行,进而重新生成路由表,常见的触发进程重启的场景包括:
- 修改了站点根目录下的
web.config文件 - 更新了bin目录下的应用程序dll文件
- IIS应用池手动回收/自动回收
- 服务器重启
如果你在业务代码中手动修改RouteTable.Routes集合的内容,属于主动修改全局路由规则,修改后的规则会对所有后续请求生效,不属于框架自动重新创建路由表的范畴。
内容的提问来源于stack exchange,提问作者Sagar Tube
相关产品推荐
相关产品推荐

