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

.NET 6迁移后Swagger返回404,求排查缺失配置

.NET 6迁移后Swagger返回404的修复方案

以下是你可能遗漏的关键配置,对应问题逐一修复:

1. 修正SwaggerEndpoint的路径

你设置了RoutePrefix = "info/api",此时SwaggerUI的访问路径是/info/api,但原代码中SwaggerEndpoint的相对路径会被解析为/info/api/swagger/v1/swagger.json,而swagger.json的实际路径是/swagger/v1/swagger.json,导致找不到文件返回404。

修改为绝对路径即可解决:

app.UseSwaggerUI(options =>
{
    options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
    options.RoutePrefix = "info/api";
});

2. 保证中间件顺序正确

在.NET 6中,中间件的执行顺序直接影响功能可用性,Swagger相关中间件必须放在UseRouting()之后、UseAuthorization()之前,且在UseEndpoints()之前配置。正确的Program.cs代码结构示例:

var builder = WebApplication.CreateBuilder(args);

// 添加控制器服务(必须)
builder.Services.AddControllers();

// 注册Swagger服务
builder.Services.AddSwaggerGen(options =>
{
    var documentationXMLFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
    var documentationXMLFullPath = Path.Combine(AppContext.BaseDirectory, documentationXMLFile);
    options.IncludeXmlComments(documentationXMLFullPath);
});

var app = builder.Build();

// 开发环境配置(可选)
if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

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

// Swagger中间件必须放在此处
app.UseSwagger();
app.UseSwaggerUI(options =>
{
    options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
    options.RoutePrefix = "info/api";
});

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

app.Run();

3. 确认已注册控制器服务

如果你的代码中没有添加builder.Services.AddControllers()(或AddMvc()),Swagger无法识别API端点,也会导致访问异常。务必在服务注册阶段添加这一行。

4. 检查XML注释文件生成(可选)

虽然不会直接导致404,但如果XML注释文件未生成,Swagger文档会缺失接口说明。需要在项目属性的「生成」选项卡中勾选「XML文档文件」,确保生成路径与代码中读取的路径一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:30:20