.NET 8 Razor Pages如何移除页面默认路由,禁止直接访问原路径?
移除.NET 8 Razor Pages默认路由,仅保留自定义数据库路由
方法1:通过路由约定清除默认路由并添加自定义路由
在配置Razor Pages路由时,对每个页面先清除所有现有路由模板,再添加从数据库获取的自定义路由。这样就能彻底移除默认的文件路径路由,只保留你配置的自定义路由。
// 假设routesFromDb是从数据库查询到的路由集合,每个route包含FullName(页面路径如"/Account/Login")和Key(自定义路由值如"A64592D0-05AD-4E0D-8A0C-5E5259800A19") foreach (var route in routesFromDb) { options.Conventions.ForPage(route.FullName) .ClearRouteTemplates() // 清除该页面的所有默认路由模板 .AddPageRoute(route.FullName, route.Key.ToString()); // 添加自定义路由 }
ClearRouteTemplates()会移除页面所有默认的路由规则,之后只保留你通过AddPageRoute添加的自定义路由,用户就无法再通过/Account/Login这类默认路径访问页面了。
方法2:使用页面过滤器拦截默认路径访问
如果方法1无法满足需求(比如某些页面需要保留部分路由),可以通过页面过滤器拦截对默认路径的请求,直接返回404或其他自定义结果。
1. 创建页面过滤器类
public class BlockDefaultRouteFilter : IPageFilter { private readonly IRouteRepository _routeRepository; // 注入你的路由数据访问服务 public BlockDefaultRouteFilter(IRouteRepository routeRepository) { _routeRepository = routeRepository; } public void OnPageHandlerSelected(PageHandlerSelectedContext context) { // 获取当前页面的完整路径(不含.cshtml后缀) var pageFullPath = context.ActionDescriptor.RelativePath.Replace(".cshtml", string.Empty); var requestPath = context.HttpContext.Request.Path.Value?.Trim('/') ?? string.Empty; // 获取该页面所有合法的自定义路由键 var validRouteKeys = _routeRepository.GetRoutesForPage(pageFullPath) .Select(r => r.Key.ToString().Trim('/')) .ToList(); // 检查请求路径是否是页面默认路径,且不在合法自定义路由列表中 var defaultPagePath = pageFullPath.Trim('/'); if (requestPath.Equals(defaultPagePath, StringComparison.OrdinalIgnoreCase) && !validRouteKeys.Contains(requestPath, StringComparer.OrdinalIgnoreCase)) { // 返回404,也可以根据需求返回其他结果(如跳转至自定义路由) context.Result = new NotFoundResult(); } } public void OnPageHandlerExecuting(PageHandlerExecutingContext context) { } public void OnPageHandlerExecuted(PageHandlerExecutedContext context) { } }
2. 注册过滤器
在Program.cs中添加过滤器的依赖注入:
builder.Services.AddScoped<IPageFilter, BlockDefaultRouteFilter>();
关于@page指令的说明
你之前尝试修改@page指令的方式无效,是因为@page指令只会添加路由模板,不会移除默认的文件路径路由。即使你设置了一个无用的值,页面仍然会保留默认的路由规则。所以必须通过路由约定或过滤器的方式来彻底禁用默认路由。
内容的提问来源于stack exchange,提问作者user15215837
相关产品推荐
相关产品推荐

