我正在使用 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 等的变体,但我没有任何运气。
找不到此本地主机页面。 未找到该网址的网页: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();