.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
相关产品推荐
相关产品推荐

