.NET Core 3中Action加[Route]特性时OnActionExecuting不触发
问题解决:.NET Core 3中添加[Route]特性后OnActionExecuting不触发
问题根源
在.NET Core 3+中,属性路由([Route]特性)需要单独启用,你当前的Startup.cs仅配置了传统路由(MapControllerRoute),没有开启属性路由支持,导致带有[Route]特性的Action无法被路由系统识别,进而对应的OnActionExecuting方法不会触发。
解决方案
1. 在Startup.cs中启用属性路由
修改UseEndpoints配置,添加endpoints.MapControllers();,确保属性路由生效:
app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute(name: "areas", pattern: "{area:exists}/{controller=AdminHome}/{action=DashBoard}/{id?}"); endpoints.MapAreaControllerRoute(name: "Admins", areaName: "Admins", pattern: "Admins/{controller=AdminHome}/{action=DashBoard}"); endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Cities}/{id?}"); // 启用属性路由支持 endpoints.MapControllers(); });
2. 验证路由匹配的URL是否正确
- 如果控制器没有添加类级别的
[Route]特性,Action上的[Route("Login/{id}")]对应的访问URL应为/Login/{id}(例如/Login/1)。 - 如果控制器上添加了类级路由(比如
[Route("[controller]")]),则完整URL为/{控制器名}/Login/{id}(例如控制器名为Account时,URL是/Account/Login/1)。
3. 确认过滤器的继承关系
确保Login方法所在的控制器,继承了包含OnActionExecuting重写逻辑的基类控制器,或者直接在当前控制器中重写了该方法(你的代码已满足此条件,可忽略)。
内容的提问来源于stack exchange,提问作者Waqasify
相关产品推荐
相关产品推荐

