ASP.NET Core中UseRouting方法工作原理及路由匹配逻辑疑问
关于ASP.NET Core路由中间件与端点匹配的疑问解答
你混淆了请求处理管道的执行顺序和端点注册的时机,这是核心原因:
UseRouting()的作用是把「路由匹配中间件」添加到请求处理管道中,这个中间件是在请求进来时才执行匹配逻辑的,但它本身不负责定义端点。- 而
MapControllerRoute、Map("/something")这类方法,并不是请求处理管道里的中间件,它们是在**应用启动阶段(配置管道的过程中)**就执行的,执行时会把对应的端点规则注册到ASP.NET Core的路由系统中,形成一个全局的端点集合。 - 也就是说,不管代码里
UseRouting()和MapXXX的先后顺序,只要MapXXX在应用启动时被执行过,对应的端点就已经被提前注册好了。当请求进来时,UseRouting中间件直接从这个预注册的端点集合里查找匹配项,自然能匹配到/Home/Index这类控制器路由。
举个你的代码例子:
// ..some other middleware UseRouting(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Map("/something", (context) => context.Response.WriteAsync("Hello World!")); // some other middleware
这段代码在启动时,会先执行UseRouting()把路由匹配中间件加入管道,接着执行MapControllerRoute和Map("/something")完成两个端点的注册。等真正有请求进来时,请求处理管道会按顺序执行到UseRouting中间件,此时它已经能拿到所有预注册的端点,自然可以完成https://localhost:5000/Home/Index这类请求的匹配。
内容的提问来源于stack exchange,提问作者CortezZ-1
相关产品推荐
相关产品推荐

