如何在.NET 6极简API中通过代码配置Swagger替代配置文件?
实现方案
1. 对齐Swagger UI访问路径(匹配launchUrl: "swagger")
现有代码里的app.UseSwaggerUI()默认就用/swagger作为访问路径,已经和launchSettings的配置一致。如果要显式确认配置,可以修改为:
app.UseSwaggerUI(options => { options.RoutePrefix = "swagger"; // 显式指定路径,确保和launchUrl完全匹配 });
2. 代码配置双端口(对应applicationUrl)
launchSettings里的端口配置是通过配置文件生效的,如果你想完全用C#代码控制端口而不依赖配置文件,可以在构建WebApplication时配置Kestrel:
var builder = WebApplication.CreateBuilder(args); // 配置Kestrel监听指定的HTTP和HTTPS端口 builder.WebHost.ConfigureKestrel(serverOptions => { serverOptions.ListenLocalhost(5285, o => o.UseHttp()); serverOptions.ListenLocalhost(7087, o => o.UseHttps()); });
要是想保持和launchSettings.json的配置同步(读取配置文件里的端口值),可以这么写:
var applicationUrl = builder.Configuration["ASPNETCORE_URLS"] ?? "https://localhost:7087;http://localhost:5285"; builder.WebHost.UseUrls(applicationUrl);
3. 保持仅开发环境启用Swagger(已符合要求)
现有代码已经通过if (app.Environment.IsDevelopment())判断,只在开发环境开启Swagger和SwaggerUI,和launchSettings里的ASPNETCORE_ENVIRONMENT: "Development"完全匹配,这部分无需修改。
修改后的完整Program.cs代码
public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); // 可选:代码配置端口(替换launchSettings的applicationUrl) builder.WebHost.ConfigureKestrel(serverOptions => { serverOptions.ListenLocalhost(5285, o => o.UseHttp()); serverOptions.ListenLocalhost(7087, o => o.UseHttps()); }); // 或者读取配置文件中的端口(和launchSettings保持一致) // var applicationUrl = builder.Configuration["ASPNETCORE_URLS"] ?? "https://localhost:7087;http://localhost:5285"; // builder.WebHost.UseUrls(applicationUrl); builder.Services.AddAuthorization(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); // 显式配置Swagger UI路径,对齐launchUrl app.UseSwaggerUI(options => { options.RoutePrefix = "swagger"; }); } app.UseHttpsRedirection(); app.UseAuthorization(); var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; app.MapGet("/weatherforecast", (HttpContext httpContext) => { var forecast = Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = summaries[Random.Shared.Next(summaries.Length)] }) .ToArray(); return forecast; }) .WithName("GetWeatherForecast"); app.Run(); } }
补充说明
- 关于端口:如果不修改代码,launchSettings.json里的
applicationUrl会自动生效,代码配置是可选操作,适合需要动态指定端口的场景。 - Swagger路径:默认就是
/swagger,显式配置是为了明确和launchSettings的配置对齐,避免后续修改出现偏差。
内容的提问来源于stack exchange,提问作者ashlar64
相关产品推荐
相关产品推荐

