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

.NET Core 7中如何限制未搭建的Identity页面访问权限?

解决.NET Core 7 Identity未搭建页面仍可访问的问题

问题原因

你遇到的情况是因为.NET Core Identity的默认UI内置了所有管理页面的路由和视图,哪怕你没有在本地生成对应的.cshtml文件,框架依然会使用内置视图响应请求。ManageNavPages.cs仅用于管理导航菜单的激活状态——修改这个文件只会隐藏导航栏入口,无法阻止用户通过直接输入URL访问页面,和页面的可访问权限完全无关。

解决方法

方法一:生成并修改/删除本地页面文件

  1. 执行以下命令生成PersonalData页面的本地文件:
    dotnet aspnet-codegenerator identity -dc Social_Media_App.Data.ApplicationDbContext --files Account.Manage.PersonalData
    
  2. 生成后可选择两种处理方式:
    • 限制访问权限:在PersonalData.cshtml.cs的页面模型类上添加授权特性,比如仅允许管理员访问:
      [Authorize(Roles = "Admin")]
      public class PersonalDataModel : PageModel
      {
          // 原有代码...
      }
      
    • 直接禁用页面:删除生成的PersonalData.cshtml和PersonalData.cshtml.cs文件,用户访问该URL时会返回404错误。

方法二:通过路由规则拦截访问

若不想生成本地文件,可直接在Program.cs中添加路由规则拦截请求:

app.UseEndpoints(endpoints =>
{
    // 保留原有路由配置
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    endpoints.MapRazorPages();

    // 拦截PersonalData页面请求,返回404
    endpoints.Map("/Identity/Account/Manage/PersonalData", context =>
    {
        context.Response.StatusCode = StatusCodes.Status404NotFound;
        return Task.CompletedTask;
    });
});

如果仅需禁止未登录用户访问(登录用户仍可访问),可给路由添加授权要求:

endpoints.Map("/Identity/Account/Manage/PersonalData", context =>
{
    context.Response.StatusCode = StatusCodes.Status404NotFound;
    return Task.CompletedTask;
}).RequireAuthorization();

方法三:自定义Identity UI(进阶)

若需完全控制Identity页面集合,可在配置Identity时替换默认UI,仅包含你需要的页面(此方法较繁琐,适合大量自定义场景):

builder.Services.AddIdentity<IdentityUser, IdentityRole>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddTokenProvider<DataProtectorTokenProvider<IdentityUser>>(TokenOptions.DefaultProvider);
// 不再使用AddDefaultUI,手动添加所需页面路由

内容的提问来源于stack exchange,提问作者Alexander Nedelchev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:15:06