You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:40:22