ASP.NET Core 7 Razor Pages模板项目路由默认失效,出现404错误
我通过Visual Studio 2022创建了未启用MVC、未添加身份验证的ASP.NET Core 7 Razor Pages模板项目,Program.cs仅保留核心配置代码。运行项目后无论操作如何,始终显示“Page not found”404错误。已确认Index.cshtml与Index.cshtml.cs文件均位于Pages文件夹中(文件位置截图:
)
相关代码如下:
Program.cs
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); //builder.Services.AddRazorPages().AddRazorPagesOptions(options => //{ // options.RootDirectory = "/"; //}); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapRazorPages(); app.Run();
Index.cshtml
@page @model IndexModel @{ ViewData["Title"] = "Home page"; } <div class="text-center"> <h1 class="display-4">Welcome</h1> <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p> </div>
Index.cshtml.cs
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; namespace RazorPagesWebApp.Pages { public class IndexModel : PageModel { private readonly ILogger<IndexModel> _logger; public IndexModel(ILogger<IndexModel> logger) { _logger = logger; } public void OnGet() { } } }
排查解决方案
检查启动配置文件:打开
Properties/launchSettings.json,确认launchUrl设置为"/"或留空,applicationUrl没有额外的路径后缀(比如不要写成https://localhost:5001/foo)。如果启动URL指向了不存在的路径,会直接返回404。验证页面文件属性:右键
Index.cshtml→属性,将“复制到输出目录”设置为如果较新则复制或始终复制。若该属性为“不复制”,编译后输出目录会缺少页面文件,导致无法访问。确认命名空间一致性:右键项目→属性→应用程序,查看“根命名空间”是否为
RazorPagesWebApp,需与IndexModel的命名空间RazorPagesWebApp.Pages完全匹配,否则Razor页面无法关联对应的PageModel。清理重建项目:执行菜单→生成→清理解决方案,再重新生成项目。编译缓存可能导致页面未被正确识别,清理后可解决此类问题。
临时排查中间件影响:尝试注释掉
app.UseAuthorization();(尽管未添加身份验证,该中间件理论上不影响,但可排除潜在的拦截问题),重新运行项目测试是否能访问首页。
内容的提问来源于stack exchange,提问作者Leon

