.NET 8 Preview 6中Razor Pages仅启用RuntimeCompilation才渲染的问题
问题:ASP.NET 8 Preview 6中Razor Pages未启用RuntimeCompilation时出现404错误
使用标准ASP.NET 8(或.NET 7)Web应用模板时,不启用Razor RuntimeCompilation,Razor Pages就无法渲染(路由不被识别),Chrome浏览器中显示标准404错误页面;启用AddRazorRuntimeCompilation()后功能恢复正常。中间件管道配置看似无问题,相关代码如下:
WebApplicationBuilder builder = WebApplication.CreateBuilder(args); // 正常工作 // ----------------------------------------------- builder.Services.AddRazorPages().AddRazorRuntimeCompilation(); // 无法工作 // ----------------------------------------------- builder.Services.AddRazorPages(); WebApplication app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapRazorPages(); app.Run();
当前使用.NET 8 Preview 6版本。
排查与解决建议
检查项目文件(.csproj)的编译配置,确保Razor编译开关已启用。默认情况下这些配置应该存在,但预览版本可能出现异常,需确认以下节点:
<PropertyGroup> <TargetFramework>net8.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <RazorCompileOnBuild>true</RazorCompileOnBuild> <RazorCompileOnPublish>true</RazorCompileOnPublish> </PropertyGroup>清理编译缓存后重新构建:手动删除项目根目录下的
bin和obj文件夹,或执行命令:dotnet clean dotnet build确认Razor Pages文件结构与路由:确保页面文件(如
Index.cshtml)放置在项目根目录的Pages文件夹下,页面的@page指令配置正确(无自定义路由需求时,仅保留@page即可)。更新.NET版本:.NET 8 Preview 6属于预览版,可能存在Razor编译相关的已知bug,建议升级到最新的.NET 8预览版或等待稳定版发布。
验证中间件顺序:当前中间件顺序符合ASP.NET Core规范,但需排查是否存在自定义中间件提前拦截了路由请求,导致Razor Pages路由未被匹配。
内容的提问来源于stack exchange,提问作者Lindstrøm
相关产品推荐
相关产品推荐

