无法在本地从新 API 加载 Swagger 页面

问题描述 投票:0回答:1

我正在使用 Visual Studio 2022,我有一个新的 ASP.NET Core 8.0 Web API 项目。我删除了创建项目时加载的示例天气预报的所有痕迹,但现在当我调试应用程序时,出现以下错误:

找不到此本地主机页面。
未找到该网址的网页:https://localhost:7088/swagger

我也手动调整了 URL 但仍然出现错误

未找到该网址的网页:https://localhost:7088/api/present

据我所知,此设置是由控制器类

launchsettings.json
program.cs
中的不正确设置引起的。

我的控制器代码如下所示:

Controller class
[ApiController]
Route("api/[controller]")]
public class PresentController(IPresentsService _presentsService) : ControllerBase
{
    [HttpGet]
    [Produces(MediaTypeNames.Application.Json)]
    [ProducesResponseType(typeof(IEnumerable<PresentDto>), StatusCodes.Status200OK)]
    public async Task<IEnumerable<PresentDto>> GetAllPresentsAsync()
    {
        return await _presentsService.GetAllPresentsAsync();
    }
}

我的

launchSettings.json
看起来像这样:

"https": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "launchUrl": "swagger",
      "applicationUrl": "https://localhost:7088;http://localhost:5030",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
}

我的

Program.cs
看起来像这样:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();

// Add services to the container.
builder.Services.AddScoped<IPresentsRepository, PresentsRepository>();
builder.Services.AddScoped<IPresentsService, PresentsService>();

builder.Services.AddDbContext<PresentsDbContext>(options =>
{
    options.UseNpgsql(builder.Configuration.GetConnectionString("PresentsDb"));
});

builder.Services.AddEndpointsApiExplorer();

builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

var app = builder.Build();

// Configure the HTTP request pipeline.
app.UseHttpsRedirection();

app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
    c.RoutePrefix = "";
});

app.Run();

有人可以解释一下我做错了什么吗?我也尝试过一些类似 Swashbuckle、SwaggerUI 等的变体,但我没有任何运气。

swagger asp.net-core-webapi .net-8.0
1个回答
0
投票

找不到此本地主机页面。 未找到该网址的网页:https://localhost:7088/swagger

您遇到错误的原因是您为 swagger 路径设置了

RoutePrefix 
,但您仍然使用旧的路径,您应该删除
 c.RoutePrefix = "";
,然后是路径(https://localhost:7088/swagger)是对的。

未找到该网址的网页:https://localhost:7088/api/present

此外,在你的program.cs中,你删除了

app.UseSwagger()
app.MapControllers();
,这将导致你的第二个错误,没有API控制器的路由,并且swagger middelware不会生成swagger json。

正确的代码如下:

var app = builder.Build();

// Configure the HTTP request pipeline.
app.UseHttpsRedirection();
app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");

});
app.MapControllers();
app.Run();
© www.soinside.com 2019 - 2024. All rights reserved.