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

使用IHostBuilder引导ASP.NET Core 7应用时所有路由返回404的问题

使用IHostBuilder引导ASP.NET Core 7应用时所有路由返回404的问题

咱们来一步步拆解你代码里的问题,这些细节导致了路由无法正常匹配:

1. 配置服务时的语法错误与冗余代码

你在ConfigureServices里的代码有语法闭合问题,还重复添加了Mvc服务:

  • services.AddControllersWithViews().AddRazorRuntimeCompilation();后面的括号没闭合,导致代码结构混乱
  • services.AddMvc();完全是冗余的——AddControllersWithViews()已经包含了MVC核心服务,重复添加反而可能引发服务注册冲突

2. Serilog集成方式不正确

你手动创建了SerilogLoggerFactory,但没有把Serilog真正注册到Host的日志系统中,这虽然不是404的直接原因,但会导致日志无法正常输出,不利于后续排查问题。

3. 路由配置的冗余与匹配逻辑问题

你同时注册了MapControllers、MapRazorPages和MapDefaultControllerRoute,如果你的应用是纯MVC项目,过多的路由映射可能导致匹配逻辑混乱;另外要确认你的控制器是否有对应的默认Action(比如Index)。


修正后的完整代码

using Serilog;

var configuration = new ConfigurationBuilder()
    .AddEnvironmentVariables()
    .AddCommandLine(args)
    .AddJsonFile("appsettings.json")
    .AddJsonFile("appsettings.Development.json", optional: true)
    .Build();

// 先初始化Serilog配置
Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    .CreateLogger();

try
{
    var hostBuilder = Host.CreateDefaultBuilder(args)
        // 将Serilog集成到Host的日志系统
        .UseSerilog()
        .ConfigureServices(services =>
        {
            // 正确注册MVC服务,移除冗余的AddMvc()
            services.AddControllersWithViews()
                .AddRazorRuntimeCompilation();
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseConfiguration(configuration);
            webBuilder.Configure((context, app) =>
            {
                if (!context.HostingEnvironment.IsDevelopment())
                {
                    app.UseExceptionHandler("/Error");
                    app.UseHsts();
                }

                // 建议添加HTTPS重定向,适配生产环境规范
                app.UseHttpsRedirection();
                app.UseStaticFiles();
                app.UseRouting();
                app.UseAuthentication();
                app.UseAuthorization();

                app.UseEndpoints(endpoints =>
                {
                    // 默认MVC路由,确保控制器有对应的Action(比如Index)
                    endpoints.MapDefaultControllerRoute().RequireAuthorization();
                    
                    // 按需保留以下路由:如果是API项目就开启MapControllers,Razor Pages项目开启MapRazorPages
                    // endpoints.MapControllers();
                    // endpoints.MapRazorPages();
                });
            });
        });

    await hostBuilder.Build().RunAsync();
}
catch (Exception ex)
{
    Log.Fatal(ex, "应用启动意外终止");
}
finally
{
    Log.CloseAndFlush();
}

额外检查要点

  • 确认你的控制器类继承自Controller,并且包含public IActionResult Index()这样的默认Action,对应根路径/
  • 检查appsettings.json中ASPNETCORE_ENVIRONMENT是否设置为Development,确保开发环境配置和Razor运行时编译生效
  • 核对项目结构:Controllers目录下有正确的控制器文件,Views目录有对应的视图文件(如果是MVC视图项目)

备注:内容来源于stack exchange,提问作者Alexander Zeitler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:34:32