配置Razor Pages仅监听特定路由,解决与FastEndpoints路由冲突
解决FastEndpoints与Duende IdentityServer Razor Pages路由冲突问题
方案一:限制Razor Pages仅监听特定路由
Duende IdentityServer的Razor Pages仅用于身份认证相关页面(如登录、授权确认),可通过配置让其只处理指定前缀的路由,避免干扰API路由:
// 配置Razor Pages服务时限定路由前缀 builder.Services.AddRazorPages() .AddIdentityServerPages() // 保留Duende IdentityServer的页面注册 .AddRazorPagesOptions(options => { // 让所有Razor Pages路由都带上/identity前缀 options.Conventions.AddFolderRouteModelConvention("/", model => { foreach (var selector in model.Selectors) { selector.AttributeRouteModel.Template = "/identity" + selector.AttributeRouteModel.Template; } }); }); // 注册中间件时指定路由匹配规则 app.UseRazorPages("/identity/{*slug}");
此配置后,Razor Pages仅响应/identity/**路径的请求,完全不会影响/users/self这类API路由。
方案二:调整中间件顺序,让FastEndpoints优先级更高
ASP.NET Core中间件按注册顺序执行,将FastEndpoints的中间件注册在Razor Pages之前,即可让API路由优先被处理:
// 先注册FastEndpoints中间件 app.UseFastEndpoints(x => { x.Endpoints.Configurator = definition => { definition.Description(desc => desc.ProducesProblemFE<CommonErrorResponse>(500)); definition.Description(desc => desc.ProducesProblemFE<ErrorResponse>()); }; x.Endpoints.Filter = ep => true; }); // 再注册Razor Pages中间件 app.UseRazorPages();
请求会先经过FastEndpoints匹配API路由,匹配成功则直接返回响应;未匹配到API路由时,才会交由Razor Pages处理身份相关页面。
内容的提问来源于stack exchange,提问作者Stefan S.
相关产品推荐
相关产品推荐

