Swagger and Swashbuckle with ASP.NET Core API
This post is going to walk through adding Swagger to an existing ASP.NET Core API application using Swashbuckle. The starting point for the code can be found here.
What is Swagger?
Swagger is a specification on documentation an API. As I am sure we all know API documentation tends to get out of date fast and a lot of times is a low priority.  Swagger aims to help solve that problem using a format that is both human and machine readable which can be maintained in either JSON or YAML and can be auto generated using a tool like Swashbuckle. Check out this post by the Swagger team for the full introduction.
What is Swashbuckle?
Swashbuckle provides auto generation of Swagger 2.0, swagger-ui integration, etc. The project takes all the pain out of getting going with Swagger as well as providing tools and hooks for using and customizing Swagger related items. The full description can be found here.
Adding Swashbuckle to the project
There are lots of ways to get a new package into an ASP.NET Core application and the following covers the NuGet UI, Package Manager Console and Project.json. Pick one of them to use.
NuGet UI
Right click on the project Swashbuckle is going to be added to, Contacts in the case of the sample code, and select Manage NuGet Packages.
Select the Browse tab, check the Include prerelease checkbox and search for Swashbuckle. Prerelease is need to get the version that works with ASP.NET Core.
Finally click the Install button and work though any confirmation dialog screens that might show.
Package manager console
From the package manager console run Install-Package Swashbuckle -Pre.
Project.json
Open porject.json and in the dependencies section add “Swashbuckle”: “6.0.0-beta902”.
Add and configure Swashbuckle
In the ConfigureServices function of the Startup class add the following. I added it as the end, but placement shouldn’t matter.
services.AddSwaggerGen();
Next in the Configure function after app.UseMvc add the following.
app.UseSwagger(); app.UseSwaggerUi();
The first line enable serving of the Swagger JSON endpoint and the second enables the swagger-ui.
Test it out
Running the application will now provide two new routes one or each of the items added to the Configure function above.
The first is http://localhost:13322/swagger/v1/swagger.json (your base URL may differ if not using the sample procject) and it exposes the Swagger compliant JSON.
The second URL is http://localhost:13322/swagger/ui and it provides a very readable view of the documented API along with examples and options to try the API out. The following as an example of what the current version outputs.
Wrapping up
Swashbuckle make it easy to add Swagger to a project. I feel that it also provides a huge value for anyone trying to consume an API. It is of course not a magic bullet and communication with your API consumers about API changes will still be critical.
Microsoft’s docs has a great walk through which can be found here. It does more in-depth on customizing your setup and as far as modifying the look of the UI.
The code for this post in it’s finished state can be found here.
Swagger and Swashbuckle with ASP.NET Core API Read More »