Swashbuckle.AspNetCore.CleanRequests
1.0.0
dotnet add package Swashbuckle.AspNetCore.CleanRequests --version 1.0.0
NuGet\Install-Package Swashbuckle.AspNetCore.CleanRequests -Version 1.0.0
<PackageReference Include="Swashbuckle.AspNetCore.CleanRequests" Version="1.0.0" />
paket add Swashbuckle.AspNetCore.CleanRequests --version 1.0.0
#r "nuget: Swashbuckle.AspNetCore.CleanRequests, 1.0.0"
// Install Swashbuckle.AspNetCore.CleanRequests as a Cake Addin #addin nuget:?package=Swashbuckle.AspNetCore.CleanRequests&version=1.0.0 // Install Swashbuckle.AspNetCore.CleanRequests as a Cake Tool #tool nuget:?package=Swashbuckle.AspNetCore.CleanRequests&version=1.0.0
Introduction
Well designed RESTful APIs often use nesting on endpoints to show relationships between entities, so it's easier to understand them. In addition many modern web applications use Mediator pattern to achieve loose coupling between objects (see MediatR library for example implementation). An example RESTful request is shown below.
[HttpPut("{orderId:int}/items/{itemId:int}")]
public ActionResult<int> UpdateOrderItem(int orderId, int itemId,
[FromBody] UpdateOrderItemRequest request)
{
request.OrderId = orderId;
request.ItemId = itemId;
// ...
}
The problem is that both the URL and the UpdateOrderItemRequest
class contain orderId
and itemId
, while only the URL values are used. Unfortunately Swagger doesn't know that, so you have to deal with it manually. You can create an additional class without duplicated properties, put it into the endpoint definition and map it to the UpdateOrderItemRequest
, or you can use this library to exclude duplicates.
Important
The library is designed with the assumption that request classes are used only once per request.
It means that you should not use UpdateOrderItemRequest
for different requests.
Usage
In the
ConfigureServices
method ofStartup.cs
search forAddSwaggerGen
call and register the filters. Define where to look for duplicates usingParameterLocation
enum (the default value isParameterLocation.Path
).builder.Services.AddSwaggerGen(options => { options.ExcludeDuplicatedBodyProperties(ParameterLocation.Path); options.ExcludeDuplicatedQueryParameters(ParameterLocation.Path); });
Now you can start your application and check out the schemas.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Swashbuckle.AspNetCore.SwaggerGen (>= 6.4.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.0 | 1,435 | 8/7/2022 |