Search code examples
c#asp.net-core-webapi.net-6.0swagger-uiswashbuckle

Getting error for Swagger UI with an ASP.NET Core 6 Web API with custom routing


I have custom routing for my ASP.NET Core 6 Web API:

[ApiController]
[Route("ForecastService")]
public class WeatherForecastController : ControllerBase
{
    [HttpGet("forecast")]
    public IEnumerable<string> Get1()
    {
        return new[] { "forecast" };
    }
}

I have made this change in the Swagger configuration:

 builder.Services.AddControllers();
        // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
        builder.Services.AddEndpointsApiExplorer();
        builder.Services.AddSwaggerGen();

        var app = builder.Build();

        // Configure the HTTP request pipeline.
        if (app.Environment.IsDevelopment())
        {
            //app.UseSwagger();
            //app.UseSwaggerUI();
            app.UseSwagger(c => c.RouteTemplate = "ForecastService/{documentName}/swagger.json");
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("ForecastService/v1/swagger.json", "Forcast API");
                c.RoutePrefix = "ForecastService/swagger";
            });
        }

Now while trying to run browse to http://localhost:5113/ForecastService/swagger/index.html, I am getting an error:

Not found http://localhost:5113/ForecastService/swagger/ForecastService/v1/swagger.json

What am I missing here?

enter image description here


Solution

  • Change your configuration for swagger like below:

    //miss the swagger after ForecastService.....
    app.UseSwagger(c => c.RouteTemplate = "ForecastService/swagger/{documentName}/swagger.json");
    app.UseSwaggerUI(c =>
    {
        //miss the `/` in the beginning and also miss the swagger after ForecastService...
        c.SwaggerEndpoint("/ForecastService/swagger/v1/swagger.json", "Forcast API");
        c.RoutePrefix = "ForecastService/swagger";
    });