How to change base url of Swagger in ASP.NET core
C#asp.netasp.net CoreSwaggerC# Problem Overview
By default when you enable swagger in ASP.NET Core project it's available on url:
http://localhost:<random_port>/swagger/ui
I would like to use a different base url instead of /swagger/ui
. How/where can i configure that?
I found that for older versions you can configure the RootUrl
but there aren't similiar method in ASP.NET Core:
.EnableSwagger(c =>
{
c.RootUrl(req => myCustomBasePath);
});
C# Solutions
Solution 1 - C#
The new swagger version provides you with a property called RoutePrefix.
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
c.RoutePrefix = "docs";
});
Should work for .net core
Solution 2 - C#
For ASP.NET Core 2 (and using Swashbuckle.AspNetCore.Swagger -Version 4.0.1
), a couple things can be done for a full configuration of changing the default swagger UI base URL.
If you want to add "mycoolapi" to the beginning of your default swagger UI URL, like this: http://<server>/mycoolapi/swagger
, then do the following:
In your Startup.cs Configure method:
app.UseSwagger(c =>
{
c.RouteTemplate = "mycoolapi/swagger/{documentname}/swagger.json";
});
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/mycoolapi/swagger/v1/swagger.json", "My Cool API V1");
c.RoutePrefix = "mycoolapi/swagger";
});
Then, if you currently have your launchSettings to launch browser at swagger UI upon startup (for development purposes), update your launchSettings.json file profiles section similarly:
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "mycoolapi/swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"MyProject.Web": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "mycoolapi/swagger",
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
Solution 3 - C#
You can do this as well in Config
app.UseSwaggerUI(c =>
{
c.RoutePrefix = string.Empty;
c.SwaggerEndpoint("/swagger/v1/swagger.json", "MY API");
});
Solution 4 - C#
Other answers didn't work for me in .NET 5. Here is how I added 'docs' to the route
app.UseSwagger(c => c.RouteTemplate = "/swagger/docs/{documentName}/swagger.json");
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/docs/v2/swagger.json", "My API"));
Solution 5 - C#
- Open the launchSettings.json file.
- Under the "profiles" node depending on your setup you should have one or more profiles. In may case I had "IIS Express" and another with named with my project name (e.g WebApplication1 ), now changing the launchUrl entry to "launchUrl": "swagger" solved my problem.
- If this does not work and you have other profiles do the same and test.
Solution 6 - C#
I had to dig through the original docs because all the above solutions did not work. This code in Startup.cs is what is working for me:
app.UseSwagger();
app.UseSwaggerUI(c => {
c.SwaggerEndpoint($"./v1/swagger.json", "SapWeb v1");
});
My site is a subsite in IIS. So, at first, I had to set PathBase:
app.UsePathBase($"{pathbase}");
Solution 7 - C#
The UseSwaggerUi()
extension method to enable the middleware in the Configure method of the StartUp class takes two variables. A baseRoute
which is on swagger/ui
by default, and swaggerUrl
which is on swagger/v1/swagger.json
by default. Simply provide a different baseRoute.
//Swagger will be available under '/api' url
app.UseSwaggerUi("api");
If people would like to learn more about configuring Swagger for ASP.NET Core, I've written a blogpost to get started: https://dannyvanderkraan.wordpress.com/2016/09/09/asp-net-core-1-0-web-api-automatic-documentation-with-swagger-and-swashbuckle/