我有一个 .net 8 razor 页面应用程序,我使用以下代码添加了来自数据库的页面路由:
options.Conventions.AddPageRoute(route.FullName, route.Key.ToString());
例如,我为页面/帐户/登录添加了页面路由/A64592D0-05AD-4E0D-8A0C-5E5259800A19。 现在我想避免有人可以直接使用 /Account/Login 访问该页面。
背景:每个页面都可以通过导航树中的多个路径访问,这样就可以评估用户当前在树上的位置,并根据位置和用户处理不同的权限。
我只能将 @page 指令设置为一些未使用的值,但这并不能避免使用该值访问页面的可能性。
如何删除或禁用所有页面的默认页面路由?
您可以使用 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
方法一次。