.NET6控制台应用搭建WebApplication主机返回404问题排查
.NET6控制台应用添加RazorPages后返回404的解决方法
我创建了一个.NET6控制台应用并安装了Microsoft.AspNetCore.App包,代码可正常运行并接收HTTP请求,但始终返回404响应。代码如下:
using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using AppHostTest; var testBuilder = WebApplication.CreateBuilder(new WebApplicationOptions ()); testBuilder.Services.AddRazorPages(); testBuilder.Services.AddTransient<IVehicle, Car>(); var testapp = testBuilder.Build(); testapp.UseHttpsRedirection(); testapp.UseStaticFiles(); testapp.UseRouting(); testapp.UseAuthorization(); testapp.MapRazorPages(); testapp.Run();
该代码与WebApplication模板生成的代码完全一致,但行为却不同。尝试安装Microsoft.AspNetCore.Mvc包并在服务中添加AddMvc()、在应用中添加UseMvc(),问题仍未解决。
更新1:发现模板生成的WebApplicationBuilder中WebRootFileProvider为CompositeFileProvider,WebRootPath为wwwroot;而控制台应用创建的WebApplicationBuilder中WebRootFileProvider为NullFileProvider,WebRootPath为null。
问题原因
控制台应用模板默认不会自动配置RazorPages所需的基础结构:缺少wwwroot静态文件目录、Pages页面文件夹,且未显式指定WebRootPath,导致应用无法找到Razor页面和静态资源,从而返回404。
解决步骤
创建wwwroot目录
在项目根目录下新建wwwroot文件夹,右键文件夹→属性→设置"复制到输出目录"为"如果较新则复制"。显式配置WebRootPath
修改WebApplicationBuilder的创建代码,指定WebRootPath:
var testBuilder = WebApplication.CreateBuilder(new WebApplicationOptions { WebRootPath = "wwwroot" });
- 添加RazorPages页面
在项目中创建Pages文件夹,添加至少一个基础页面,比如Index.cshtml和对应的代码文件:Index.cshtml:
@page @model AppHostTest.Pages.IndexModel @{ ViewData["Title"] = "Home"; } <h1>Hello from Razor Pages!</h1>
Index.cshtml.cs:
using Microsoft.AspNetCore.Mvc.RazorPages; namespace AppHostTest.Pages; public class IndexModel : PageModel { public void OnGet() { } }
- 确保页面文件被正确复制到输出
检查项目文件(.csproj),确保包含以下配置,让Razor页面文件被复制到输出目录:
<ItemGroup> <Content Update="Pages\**\*.cshtml"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>
完成以上步骤后,重新运行应用,访问根路径即可正常加载Razor页面。
内容的提问来源于stack exchange,提问作者MithunChopda
相关产品推荐
相关产品推荐

