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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:05:42