Blazor如何禁用未投入使用的Account身份验证页面
最优实现方案
不需要scaffold页面也不需要单独配置重定向规则,直接用ASP.NET Core内置的Razor页面路由约定或者路径拦截中间件就能实现,比你提到的两种方案都更简单,也不会产生冗余文件。
方案1:Razor页面路由约定(优先推荐)
直接在服务注册阶段就把需要禁用的Identity页面标记为无效,访问时直接返回404,适配原生路由体系,不需要额外的中间件逻辑:
using System.Net; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Identity; var builder = WebApplication.CreateBuilder(args); // 你的原有Identity服务注册逻辑保留,比如AddDefaultIdentity之类的代码不变 builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<ApplicationDbContext>(); builder.Services.AddRazorPages() .AddRazorPagesOptions(options => { // 把你需要禁用的所有Identity页面路径放到这个列表里批量处理 var disabledPagePaths = new List<string> { "/Identity/Account/Manage/ExternalLogins", "/Identity/Account/Manage/TwoFactorAuthentication", "/Identity/Account/Manage/PersonalData" }; foreach (var pagePath in disabledPagePaths) { options.Conventions.AddPageRouteFilter(context => { if (context.RelativePath.Equals(pagePath, StringComparison.OrdinalIgnoreCase)) { context.EndpointMetadata.Add(new ProducesResponseTypeAttribute((int)HttpStatusCode.NotFound)); return async httpContext => { httpContext.Response.StatusCode = (int)HttpStatusCode.NotFound; await Task.CompletedTask; }; } return null; }, pagePath); } });
方案2:中间件路径拦截(更简单直观)
如果只是临时禁用少量页面,直接在中间件管道最前面加路径匹配逻辑即可:
var app = builder.Build(); // 放在所有中间件的最前面,命中路径直接返回404 app.UseWhen(context => context.Request.Path.StartsWithSegments("/Identity/Account/Manage/ExternalLogins", StringComparison.OrdinalIgnoreCase) || context.Request.Path.StartsWithSegments("/Identity/Account/Manage/TwoFactorAuthentication", StringComparison.OrdinalIgnoreCase), appBuilder => { appBuilder.Run(async context => { context.Response.StatusCode = StatusCodes.Status404NotFound; await Task.CompletedTask; }); }); // 你原有的其他中间件逻辑保留,比如UseStaticFiles、UseRouting之类的代码不变
你提到的两种方案的弊端
- 先scaffold页面再删除内容:会生成大量你不需要的冗余文件,后续ASP.NET Core版本更新时,Identity页面的逻辑变更你还要手动同步维护,完全没必要
- 配置重定向规则:返回3xx跳转不符合“功能不存在”的语义,而且规则维护成本和上面的方案差不多,没有优势
内容的提问来源于stack exchange,提问作者Krzysztof Krysztofczyk
相关产品推荐
相关产品推荐

