.NET 7 Razor Pages如何将访问无效URL的用户重定向至自定义404页?
.NET 7 ASP.NET Razor Pages 自定义404页面实现方案
你用错了配置方式,AddPageRoute是用来给已有页面添加额外路由规则的,没法处理未匹配的无效URL。下面是可行的实现步骤:
1. 确保已创建自定义NotFound页面
在Pages目录下创建NotFound.cshtml及对应的NotFound.cshtml.cs文件(如果需要后台逻辑)。
示例NotFound.cshtml内容:
@page "{statusCode:int?}" @model NotFoundModel @{ ViewData["Title"] = "页面未找到"; } <h1>@(Model.StatusCode ?? 404) - 页面未找到</h1> <p>抱歉,您访问的页面不存在,请检查URL是否正确。</p>
示例NotFound.cshtml.cs内容:
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; namespace YourProjectName.Pages; public class NotFoundModel : PageModel { public int? StatusCode { get; set; } public void OnGet(int? statusCode) { StatusCode = statusCode; // 可根据状态码添加自定义逻辑,比如记录日志 } }
2. 配置错误处理中间件
在Program.cs中添加状态码页面重定向的中间件,替换你原来的错误处理配置:
var app = builder.Build(); // 开发环境保留开发者异常页面,生产环境用自定义错误页 if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } // 关键:配置状态码重定向到自定义NotFound页面 app.UseStatusCodePagesWithReExecute("/NotFound/{0}"); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapRazorPages(); app.Run();
说明
UseStatusCodePagesWithReExecute会捕获404等状态码,并重定向到指定页面,同时将状态码作为参数传递。- 如果不需要接收状态码,可将页面路由改为
@page,中间件配置改为app.UseStatusCodePagesWithReExecute("/NotFound")。
内容的提问来源于stack exchange,提问作者Viktor Georgakiev
相关产品推荐
相关产品推荐

