.net 8 Razor Pages 路由,没有到 @page 指令的默认路由

问题描述 投票:0回答:1

我有一个 .net 8 razor 页面应用程序,我使用以下代码添加了来自数据库的页面路由:

options.Conventions.AddPageRoute(route.FullName, route.Key.ToString());

例如,我为页面/帐户/登录添加了页面路由/A64592D0-05AD-4E0D-8A0C-5E5259800A19。 现在我想避免有人可以直接使用 /Account/Login 访问该页面。

背景:每个页面都可以通过导航树中的多个路径访问,这样就可以评估用户当前在树上的位置,并根据位置和用户处理不同的权限。

我只能将 @page 指令设置为一些未使用的值,但这并不能避免使用该值访问页面的可能性。

如何删除或禁用所有页面的默认页面路由?

asp.net-core razor-pages asp.net-routing
1个回答
0
投票

您可以使用 PageRouteModelConvention 清除所有默认路由。一个例子如下:

public class CustomPageRouteModelConvention : IPageRouteModelConvention
{
    public void Apply(PageRouteModel model)
    {
        model.Selectors.Clear();
    }
}

然后在 Program.cs 中注册它,确保之后进行

AddPageRoute
调用:

builder.Services.AddRazorPages().AddRazorPagesOptions(options =>
{
    options.Conventions.Add(new CustomPageRouteModelConvention());
    options.Conventions.AddPageRoute("/Account/Login", "A64592D0-05AD-4E0D-8A0C-5E5259800A19");
});

或者根据您的逻辑,您可以在自定义

PageRouteModelConvention
中添加自定义路由。启动时,应用程序中的每个页面都会调用
Apply
方法一次。

© www.soinside.com 2019 - 2024. All rights reserved.