如何用app.UseEndpoints手动映射MicrosoftIdentity区域控制器路由
Microsoft Identity 区域控制器路由映射修正方案
你在手动配置认证模块控制器路由时,原有配置无法正确命中MicrosoftIdentity区域下的AccountController,按以下方式修改即可:
- 给标注位置的路由规则补充区域、控制器的默认值配置
- 将该专属路由移动到通用默认路由之前注册,避免被默认路由提前拦截
修正后的完整端点配置代码如下:
app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); // Microsoft Identity 认证控制器路由 endpoints.MapControllerRoute( name: "MicrosoftIdentity", pattern: "MicrosoftIdentity/Account/{action}", defaults: new { area = "MicrosoftIdentity", controller = "Account" } ); endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
你也可以使用框架内置的区域路由扩展方法简化配置,效果完全一致:
endpoints.MapAreaControllerRoute( name: "MicrosoftIdentity", areaName: "MicrosoftIdentity", pattern: "MicrosoftIdentity/Account/{action}", defaults: new { controller = "Account" } );
错误原因说明
- 最初编写的路由规则没有指定
area路由值,框架默认会在非区域的控制器列表中查找AccountController,找不到就会返回404 - 路由匹配是按注册顺序从上到下执行的,如果把专属区域路由放在通用默认路由后面,默认路由会优先匹配请求——默认路由没有区域约束,匹配时不会去区域目录下查找控制器,最终导致路由失效。
上述配置匹配的路径规则和控制器上标注的[area]/[controller]/[action]特性路由完全对齐,可正常支撑认证流程中的增量同意、条件访问等各类跳转需求。
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

