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

.NET 6.0 ASP.NET Core Web API无法命中任何端点求助

ASP.NET Core Web API(.NET 6)所有控制器返回404,Swagger可识别但调用失败

我用.NET 6开发ASP.NET Core Web API,所有控制器方法都无法执行。即使创建了最简测试控制器也没用——Swagger能识别所有控制器和方法,但调用时始终返回404错误,直接在浏览器访问URL也是同样结果,不过服务确实在正常运行。已经花了3天排查还是没进展,怀疑是项目配置漏了基础项,附上最简控制器、Program类和Startup类的代码,求帮忙排查。


最简控制器代码

using Microsoft.AspNetCore.Mvc;

namespace CoreWebAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class testController : ControllerBase
    {
        [HttpGet]
        public IActionResult Get()
        {
            string responseString = "Hello, World!";
            return Ok(responseString);
        }
    }
}

Program类代码

using Microsoft.EntityFrameworkCore;
using System;
using CoreWebAPI;
using Microsoft.Extensions.DependencyInjection;
using CoreWebAPI.Data.DBContexts;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

namespace CoreWebAPI
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
} 

Startup类代码

using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Reflection;
using Microsoft.EntityFrameworkCore;
using CoreWebAPI.Data.DBContexts;
using CoreWebAPI.Mapings;
using AutoMapper;

namespace CoreWebAPI
{
    public class Startup
    {
        public IConfiguration Configuration { get; }

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<BuzzAlertDBContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("HomeConnection")!)); ;

            services.AddControllers();

            services.AddAutoMapper(typeof(Startup));
            services.AddAutoMapper(typeof(AutoMappingProfile));

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "CoreWebAPI", Version = "v1" });
                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                //c.IncludeXmlComments(xmlPath);
            });
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c =>
                {
                    c.SwaggerEndpoint("/swagger/v1/swagger.json", "CoreWebAPI");
                    c.EnableValidator(null);
                });
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }
        }
    }
}

排查与解决步骤

1. 修复核心问题:缺失路由与控制器中间件

你的Startup.Configure方法中没有添加路由匹配和控制器端点映射的中间件——AddControllers只是注册了控制器服务,但请求进入后没有中间件来解析路由、执行控制器逻辑,这是导致404的根本原因。

需要在Configure方法中添加以下代码(放在环境判断逻辑之后):

app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();

// 关键:映射控制器端点
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});

修改后的完整Configure方法:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseSwagger();
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "CoreWebAPI");
            c.EnableValidator(null);
        });
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseRouting();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

2. 可选优化:控制器命名规范

虽然不是404的直接原因,但ASP.NET Core路由模板[controller]会自动去掉类名的Controller后缀,你的testController对应的路由是api/test。建议遵循C#大驼峰命名规范改为TestController,保持路由模板不变即可,更符合行业惯例。

3. 其他排查点

  • 确认启动URL:检查launchSettings.json中的applicationUrl,确保访问的地址、端口与配置一致。
  • 排除数据库干扰:暂时注释掉AddDbContext代码测试,排除数据库初始化失败的潜在影响。
  • 清理重建项目:清理解决方案并重新生成,排除编译缓存导致的异常。

内容的提问来源于stack exchange,提问作者ErickTreetops

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:14:54