I recently encountered an issue while using Swashbuckle whereby everything would work fine when running it locally but the deployed version would use incorrect API URLs.
https://server.example.net/app/foo/bar?a=123
would become
https://server.example.net/foo/bar?a=123
The issue seems to be caused by the fact that server.example.net
is an API
gateway. This seems to prevent Swashbuckle from correctly inferring the URL of
the ASP.NET Core app and so it doesn’t generate the
server part of the schema. This
results in API requests (i.e. /foo/bar?a=123
) getting sent to the root of the
server.
I fixed the issue by adding the following to my Startup.cs
:
public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseSwagger(options => options.PreSerializeFilters.Add((swagger, httpReq) =>
{
if (httpReq.Host.Host == "server.example.net")
{
swagger.Servers = new List<OpenApiServer> { new OpenApiServer { Url = "/app" } };
}
}));
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("swagger/v1/swagger.json", API_NAME);
options.RoutePrefix = string.Empty;
});
}
Swagger UI should then be available at https://server.example.net/app/
and the
correct API URL should get used.