From aa9c60e5b80b781e073e6564ba9cd78633c71af9 Mon Sep 17 00:00:00 2001 From: Vladimir Pecanac Date: Sat, 10 Oct 2026 23:40:28 +0200 Subject: [PATCH] Swashbuckle vs NSwag: .NET 10, built-in OpenAPI baseline project, benchmark URL and await fixes --- .../SwashbuckleVsNSwag/README.md | 29 ++++++ .../SwashbuckleVsNSwag.Benchmark/Program.cs | 1 - .../RestClient.cs | 7 +- .../SwashbuckleVsNSwag.Benchmark.csproj | 4 +- .../SwashbuckleVsNSwagBenchmark.cs | 2 +- .../Controllers/CustomerController.cs | 34 +++++++ .../Controllers/OrderController.cs | 34 +++++++ .../Controllers/ProductController.cs | 34 +++++++ .../SwashbuckleVsNSwag.BuiltIn/Program.cs | 39 ++++++++ .../Properties/launchSettings.json | 16 ++-- .../SwashbuckleVsNSwag.BuiltIn.csproj | 19 ++++ .../appsettings.Development.json | 0 .../appsettings.json | 0 .../SwashbuckleVsNSwag.Models.csproj | 2 +- ...ollerTest.cs => CustomerControllerTest.cs} | 2 +- ...onsollerTest.cs => OrderControllerTest.cs} | 2 +- ...sollerTest.cs => ProductControllerTest.cs} | 2 +- .../SwashbuckleVsNSwag.NSwag.Tests.csproj | 12 +-- .../SwashbuckleVsNSwag.NSwag/Program.cs | 19 ++-- .../SwashbuckleVsNSwag.NSwag.csproj | 4 +- .../SwashbuckleVsNSwag.Repositories.csproj | 2 +- .../CustomerControllerTest.cs} | 4 +- .../OrderControllerTest.cs} | 4 +- .../ProductControllerTest.cs} | 4 +- ...ashbuckleVsNSwag.Swashbuckle.Tests.csproj} | 12 +-- .../Usings.cs | 0 .../SwashbuckleVsNSwag.Swashbuckle/Program.cs | 2 +- .../SwashbuckleVsNSwag.Swashbuckle.csproj | 6 +- .../SwashbuckleVsNSwag/SwashbuckleVsNSwag.sln | 91 ++++++++++++++++++- .../Controllers/WeatherForecastController.cs | 33 ------- .../SwashbuckleVsNSwag/Program.cs | 17 ---- .../SwashbuckleVsNSwag.csproj | 9 -- .../SwashbuckleVsNSwag/WeatherForecast.cs | 13 --- .../BuiltInOpenApiTests.cs | 54 +++++++++++ .../SwashbuckleTests.cs | 20 ---- .../SwashbuckleVsNSwagTests.csproj | 18 ++-- 36 files changed, 400 insertions(+), 151 deletions(-) create mode 100644 dotnet-client-libraries/SwashbuckleVsNSwag/README.md create mode 100644 dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Controllers/CustomerController.cs create mode 100644 dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Controllers/OrderController.cs create mode 100644 dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Controllers/ProductController.cs create mode 100644 dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Program.cs rename dotnet-client-libraries/SwashbuckleVsNSwag/{SwashbuckleVsNSwag => SwashbuckleVsNSwag.BuiltIn}/Properties/launchSettings.json (71%) create mode 100644 dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/SwashbuckleVsNSwag.BuiltIn.csproj rename dotnet-client-libraries/SwashbuckleVsNSwag/{SwashbuckleVsNSwag => SwashbuckleVsNSwag.BuiltIn}/appsettings.Development.json (100%) rename dotnet-client-libraries/SwashbuckleVsNSwag/{SwashbuckleVsNSwag => SwashbuckleVsNSwag.BuiltIn}/appsettings.json (100%) rename dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/{CustomerConsollerTest.cs => CustomerControllerTest.cs} (97%) rename dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/{OrderConsollerTest.cs => OrderControllerTest.cs} (97%) rename dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/{ProductConsollerTest.cs => ProductControllerTest.cs} (97%) rename dotnet-client-libraries/SwashbuckleVsNSwag/{SwashbuckleVsNSwag.Swachbuckle.Tests/CustomerConsollerTest.cs => SwashbuckleVsNSwag.Swashbuckle.Tests/CustomerControllerTest.cs} (95%) rename dotnet-client-libraries/SwashbuckleVsNSwag/{SwashbuckleVsNSwag.Swachbuckle.Tests/OrderConsollerTest.cs => SwashbuckleVsNSwag.Swashbuckle.Tests/OrderControllerTest.cs} (94%) rename dotnet-client-libraries/SwashbuckleVsNSwag/{SwashbuckleVsNSwag.Swachbuckle.Tests/ProductConsollerTest.cs => SwashbuckleVsNSwag.Swashbuckle.Tests/ProductControllerTest.cs} (95%) rename dotnet-client-libraries/SwashbuckleVsNSwag/{SwashbuckleVsNSwag.Swachbuckle.Tests/SwashbuckleVsNSwag.Swachbuckle.Tests.csproj => SwashbuckleVsNSwag.Swashbuckle.Tests/SwashbuckleVsNSwag.Swashbuckle.Tests.csproj} (65%) rename dotnet-client-libraries/SwashbuckleVsNSwag/{SwashbuckleVsNSwag.Swachbuckle.Tests => SwashbuckleVsNSwag.Swashbuckle.Tests}/Usings.cs (100%) delete mode 100644 dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/Controllers/WeatherForecastController.cs delete mode 100644 dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/Program.cs delete mode 100644 dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/SwashbuckleVsNSwag.csproj delete mode 100644 dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/WeatherForecast.cs create mode 100644 dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwagTests/BuiltInOpenApiTests.cs delete mode 100644 dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwagTests/SwashbuckleTests.cs diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/README.md b/dotnet-client-libraries/SwashbuckleVsNSwag/README.md new file mode 100644 index 0000000000..855fa9e58f --- /dev/null +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/README.md @@ -0,0 +1,29 @@ +# Swashbuckle vs. NSwag in ASP.NET Core + +Sample for the Code Maze article [Swashbuckle vs. NSwag in ASP.NET Core](https://code-maze.com/aspnetcore-swashbuckle-vs-nswag/). + +| Project | What it shows | +|---|---| +| `SwashbuckleVsNSwag.BuiltIn` | The built-in generator (`AddOpenApi()` and `MapOpenApi()`, JSON and YAML) with Swagger UI from `Swashbuckle.AspNetCore.SwaggerUi` | +| `SwashbuckleVsNSwag.Swashbuckle` | `AddSwaggerGen()`, `UseSwagger()` and `UseSwaggerUI()` | +| `SwashbuckleVsNSwag.NSwag` | `AddOpenApiDocument()`, `UseOpenApi()`, `UseSwaggerUi()` at `/swagger` and `UseReDoc()` at `/redoc` | +| `SwashbuckleVsNSwag.Benchmark` | BenchmarkDotNet GET and POST calls against the Swashbuckle and NSwag apps | + +All three web apps serve their documentation in the Development environment only. + +## Running the benchmark + +The benchmark calls two running apps, so start both first, each in its own terminal, on their `https` profiles: + +``` +dotnet run --project SwashbuckleVsNSwag.Swashbuckle --launch-profile https # https://localhost:7060 +dotnet run --project SwashbuckleVsNSwag.NSwag --launch-profile https # https://localhost:7089 +``` + +Then run the benchmark in Release: + +``` +dotnet run -c Release --project SwashbuckleVsNSwag.Benchmark +``` + +If either app is not running, every benchmark reports `NA`. diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Benchmark/Program.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Benchmark/Program.cs index ddcd74eb33..145a848ad7 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Benchmark/Program.cs +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Benchmark/Program.cs @@ -7,7 +7,6 @@ public class Program static void Main(string[] args) { BenchmarkRunner.Run(); - Console.ReadKey(); } } } diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Benchmark/RestClient.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Benchmark/RestClient.cs index 7414523429..8627e333ca 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Benchmark/RestClient.cs +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Benchmark/RestClient.cs @@ -8,12 +8,12 @@ public class RestClient { private static readonly HttpClient client = new HttpClient(); - public async Task GetCustomerAsync(string host) + public async Task GetCustomerAsync(string host) { client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var id = "8e282cc4-71bd-4ffd-b63c-05e91ba79ad1"; - return await client.GetFromJsonAsync($"{host}/customer/{id}"); + return await client.GetFromJsonAsync($"{host}customer?customerId={id}"); } public async Task PostCustomerAsync(string host) @@ -34,7 +34,8 @@ public async Task PostCustomerAsync(string host) } }; - await client.PostAsJsonAsync($"{host}/customer", customer); + var response = await client.PostAsJsonAsync($"{host}customer", customer); + response.EnsureSuccessStatusCode(); } } } diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Benchmark/SwashbuckleVsNSwag.Benchmark.csproj b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Benchmark/SwashbuckleVsNSwag.Benchmark.csproj index bd7b6cdf97..33cf518fa5 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Benchmark/SwashbuckleVsNSwag.Benchmark.csproj +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Benchmark/SwashbuckleVsNSwag.Benchmark.csproj @@ -2,13 +2,13 @@ Exe - net7.0 + net10.0 enable enable - + diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Benchmark/SwashbuckleVsNSwagBenchmark.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Benchmark/SwashbuckleVsNSwagBenchmark.cs index 122003e442..6567de8764 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Benchmark/SwashbuckleVsNSwagBenchmark.cs +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Benchmark/SwashbuckleVsNSwagBenchmark.cs @@ -41,7 +41,7 @@ public async Task NSwagGetResponse() { for (var i = 0; i < _size; i++) { - _restClient.GetCustomerAsync("https://localhost:7089/"); + await _restClient.GetCustomerAsync("https://localhost:7089/"); } } } diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Controllers/CustomerController.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Controllers/CustomerController.cs new file mode 100644 index 0000000000..384816045d --- /dev/null +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Controllers/CustomerController.cs @@ -0,0 +1,34 @@ +using Microsoft.AspNetCore.Mvc; +using SwashbuckleVsNSwag.Models.Customers; +using SwashbuckleVsNSwag.Repositories.CustomerRepository; + +namespace SwashbuckleVsNSwag.BuiltIn.Controllers +{ + [ApiController] + [Route("[controller]")] + public class CustomerController : ControllerBase + { + private readonly ILogger _logger; + private readonly ICustomerRepository _customers; + + public CustomerController(ILogger logger, ICustomerRepository customers) + { + _logger = logger; + _customers = customers; + } + + [HttpGet(Name = "GetCustomerById")] + public ActionResult Get(Guid customerId) + { + return _customers.GetById(customerId); + } + + [HttpPost(Name = "PostCustomer")] + public ActionResult Post(Customer customer) + { + _customers.Add(customer); + + return customer; + } + } +} \ No newline at end of file diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Controllers/OrderController.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Controllers/OrderController.cs new file mode 100644 index 0000000000..24bee0a3c2 --- /dev/null +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Controllers/OrderController.cs @@ -0,0 +1,34 @@ +using Microsoft.AspNetCore.Mvc; +using SwashbuckleVsNSwag.Models.Orders; +using SwashbuckleVsNSwag.Repositories.OrderRepository; + +namespace SwashbuckleVsNSwag.BuiltIn.Controllers +{ + [ApiController] + [Route("[controller]")] + public class OrderController : ControllerBase + { + private readonly ILogger _logger; + private readonly IOrderRepository _orders; + + public OrderController(ILogger logger, IOrderRepository orders) + { + _logger = logger; + _orders = orders; + } + + [HttpGet(Name = "GetOrderById")] + public ActionResult Get(Guid orderId) + { + return _orders.GetById(orderId); + } + + [HttpPost(Name = "PostOrder")] + public ActionResult Post(Order order) + { + _orders.Add(order); + + return order; + } + } +} \ No newline at end of file diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Controllers/ProductController.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Controllers/ProductController.cs new file mode 100644 index 0000000000..6314228c6d --- /dev/null +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Controllers/ProductController.cs @@ -0,0 +1,34 @@ +using Microsoft.AspNetCore.Mvc; +using SwashbuckleVsNSwag.Models.Products; +using SwashbuckleVsNSwag.Repositories.ProductRepository; + +namespace SwashbuckleVsNSwag.BuiltIn.Controllers +{ + [ApiController] + [Route("[controller]")] + public class ProductController : ControllerBase + { + private readonly ILogger _logger; + private readonly IProductRepository _products; + + public ProductController(ILogger logger, IProductRepository products) + { + _logger = logger; + _products = products; + } + + [HttpGet(Name = "GetProductById")] + public ActionResult Get(Guid productId) + { + return _products.GetById(productId); + } + + [HttpPost(Name = "PostProduc")] + public ActionResult Post(Product product) + { + _products.Add(product); + + return product; + } + } +} \ No newline at end of file diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Program.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Program.cs new file mode 100644 index 0000000000..9174eadadc --- /dev/null +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Program.cs @@ -0,0 +1,39 @@ +using SwashbuckleVsNSwag.Repositories.CustomerRepository; +using SwashbuckleVsNSwag.Repositories.OrderRepository; +using SwashbuckleVsNSwag.Repositories.ProductRepository; + +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. +builder.Services.AddControllers(); + +//Built-in OpenAPI document generation (Microsoft.AspNetCore.OpenApi) +builder.Services.AddOpenApi(); + +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + //Serve the document as JSON and as YAML + app.MapOpenApi(); + app.MapOpenApi("/openapi/{documentName}.yaml"); + + //Swagger UI from Swashbuckle.AspNetCore.SwaggerUi, pointed at the built-in document + app.UseSwaggerUI(options => + { + options.SwaggerEndpoint("/openapi/v1.json", "API using built-in OpenAPI"); + }); +} + +app.UseHttpsRedirection(); + +app.UseAuthorization(); + +app.MapControllers(); + +app.Run(); diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/Properties/launchSettings.json b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Properties/launchSettings.json similarity index 71% rename from dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/Properties/launchSettings.json rename to dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Properties/launchSettings.json index 673522939a..83b0ada7aa 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/Properties/launchSettings.json +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/Properties/launchSettings.json @@ -1,11 +1,11 @@ -{ +{ "$schema": "https://json.schemastore.org/launchsettings.json", "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://localhost:7341", - "sslPort": 44381 + "applicationUrl": "http://localhost:40377", + "sslPort": 44377 } }, "profiles": { @@ -13,8 +13,8 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "launchUrl": "weatherforecast", - "applicationUrl": "http://localhost:5191", + "launchUrl": "swagger", + "applicationUrl": "http://localhost:5108", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } @@ -23,8 +23,8 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "launchUrl": "weatherforecast", - "applicationUrl": "https://localhost:7117;http://localhost:5191", + "launchUrl": "swagger", + "applicationUrl": "https://localhost:7071;http://localhost:5108", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } @@ -32,7 +32,7 @@ "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, - "launchUrl": "weatherforecast", + "launchUrl": "swagger", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/SwashbuckleVsNSwag.BuiltIn.csproj b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/SwashbuckleVsNSwag.BuiltIn.csproj new file mode 100644 index 0000000000..30abdb2dc5 --- /dev/null +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/SwashbuckleVsNSwag.BuiltIn.csproj @@ -0,0 +1,19 @@ + + + + net10.0 + enable + enable + + + + + + + + + + + + + diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/appsettings.Development.json b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/appsettings.Development.json similarity index 100% rename from dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/appsettings.Development.json rename to dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/appsettings.Development.json diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/appsettings.json b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/appsettings.json similarity index 100% rename from dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/appsettings.json rename to dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.BuiltIn/appsettings.json diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Models/SwashbuckleVsNSwag.Models.csproj b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Models/SwashbuckleVsNSwag.Models.csproj index cfadb03dd5..9ed914b5ba 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Models/SwashbuckleVsNSwag.Models.csproj +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Models/SwashbuckleVsNSwag.Models.csproj @@ -1,7 +1,7 @@ - net7.0 + net10.0 enable enable diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/CustomerConsollerTest.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/CustomerControllerTest.cs similarity index 97% rename from dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/CustomerConsollerTest.cs rename to dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/CustomerControllerTest.cs index 8d466ceb1e..13c1d9073c 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/CustomerConsollerTest.cs +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/CustomerControllerTest.cs @@ -6,7 +6,7 @@ namespace SwashbuckleVsNSwag.NSwag.Tests { - public class CustomerConsollerTest + public class CustomerControllerTest { private Mock> _logger; private Mock _customerRepository; diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/OrderConsollerTest.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/OrderControllerTest.cs similarity index 97% rename from dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/OrderConsollerTest.cs rename to dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/OrderControllerTest.cs index 5ee0521b11..d6d16b254d 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/OrderConsollerTest.cs +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/OrderControllerTest.cs @@ -6,7 +6,7 @@ namespace SwashbuckleVsNSwag.NSwag.Tests { - public class OrderConsollerTest + public class OrderControllerTest { private Mock> _logger; private Mock _orderRepository; diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/ProductConsollerTest.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/ProductControllerTest.cs similarity index 97% rename from dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/ProductConsollerTest.cs rename to dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/ProductControllerTest.cs index 94d883e997..de9d6924f3 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/ProductConsollerTest.cs +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/ProductControllerTest.cs @@ -6,7 +6,7 @@ namespace SwashbuckleVsNSwag.NSwag.Tests { - public class ProductConsollerTest + public class ProductControllerTest { private Mock> _logger; private Mock _productRepository; diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/SwashbuckleVsNSwag.NSwag.Tests.csproj b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/SwashbuckleVsNSwag.NSwag.Tests.csproj index 5ac4e5fa4d..9742f987e3 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/SwashbuckleVsNSwag.NSwag.Tests.csproj +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag.Tests/SwashbuckleVsNSwag.NSwag.Tests.csproj @@ -1,7 +1,7 @@ - net7.0 + net10.0 enable enable @@ -9,12 +9,12 @@ - + - - - - + + + + diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag/Program.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag/Program.cs index cd6b0f2d94..f5dd08de1d 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag/Program.cs +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag/Program.cs @@ -9,11 +9,11 @@ builder.Services.AddControllers(); //NSwag configuration -builder.Services.AddOpenApiDocument(c => -{ - c.DocumentName = "v1"; - c.Title = "API using NSwag"; - c.Version = "v1"; +builder.Services.AddOpenApiDocument(c => +{ + c.DocumentName = "v1"; + c.Title = "API using NSwag"; + c.Version = "v1"; }); builder.Services.AddSingleton(); @@ -26,8 +26,13 @@ if (app.Environment.IsDevelopment()) { //Enable Swagger - app.UseOpenApi(p => p.Path = "/swagger/v1/swagger.yaml"); - app.UseReDoc(p => p.DocumentPath = "/swagger/v1/swagger.yaml"); + app.UseOpenApi(p => p.Path = "/swagger/v1/swagger.yaml"); + app.UseSwaggerUi(p => p.DocumentPath = "/swagger/v1/swagger.yaml"); + app.UseReDoc(p => + { + p.Path = "/redoc"; + p.DocumentPath = "/swagger/v1/swagger.yaml"; + }); } app.UseHttpsRedirection(); diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag/SwashbuckleVsNSwag.NSwag.csproj b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag/SwashbuckleVsNSwag.NSwag.csproj index f9548365d1..895dd074f3 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag/SwashbuckleVsNSwag.NSwag.csproj +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.NSwag/SwashbuckleVsNSwag.NSwag.csproj @@ -1,13 +1,13 @@ - net7.0 + net10.0 enable enable - + diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Repositories/SwashbuckleVsNSwag.Repositories.csproj b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Repositories/SwashbuckleVsNSwag.Repositories.csproj index ce8407cb7f..f46f2e52d4 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Repositories/SwashbuckleVsNSwag.Repositories.csproj +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Repositories/SwashbuckleVsNSwag.Repositories.csproj @@ -1,7 +1,7 @@ - net7.0 + net10.0 enable enable diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swachbuckle.Tests/CustomerConsollerTest.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle.Tests/CustomerControllerTest.cs similarity index 95% rename from dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swachbuckle.Tests/CustomerConsollerTest.cs rename to dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle.Tests/CustomerControllerTest.cs index a743275078..85e9efca59 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swachbuckle.Tests/CustomerConsollerTest.cs +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle.Tests/CustomerControllerTest.cs @@ -4,9 +4,9 @@ using SwashbuckleVsNSwag.Repositories.CustomerRepository; using SwashbuckleVsNSwag.Swashbuckle.Controllers; -namespace SwashbuckleVsNSwag.NSwag.Tests +namespace SwashbuckleVsNSwag.Swashbuckle.Tests { - public class CustomerConsollerTest + public class CustomerControllerTest { private Mock> _logger; private Mock _customerRepository; diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swachbuckle.Tests/OrderConsollerTest.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle.Tests/OrderControllerTest.cs similarity index 94% rename from dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swachbuckle.Tests/OrderConsollerTest.cs rename to dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle.Tests/OrderControllerTest.cs index d79490df9b..beb527fc5c 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swachbuckle.Tests/OrderConsollerTest.cs +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle.Tests/OrderControllerTest.cs @@ -4,9 +4,9 @@ using SwashbuckleVsNSwag.Repositories.OrderRepository; using SwashbuckleVsNSwag.Swashbuckle.Controllers; -namespace SwashbuckleVsNSwag.NSwag.Tests +namespace SwashbuckleVsNSwag.Swashbuckle.Tests { - public class OrderConsollerTest + public class OrderControllerTest { private Mock> _logger; private Mock _orderRepository; diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swachbuckle.Tests/ProductConsollerTest.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle.Tests/ProductControllerTest.cs similarity index 95% rename from dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swachbuckle.Tests/ProductConsollerTest.cs rename to dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle.Tests/ProductControllerTest.cs index d02e87fbe2..b9db7304b9 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swachbuckle.Tests/ProductConsollerTest.cs +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle.Tests/ProductControllerTest.cs @@ -4,9 +4,9 @@ using SwashbuckleVsNSwag.Repositories.ProductRepository; using SwashbuckleVsNSwag.Swashbuckle.Controllers; -namespace SwashbuckleVsNSwag.NSwag.Tests +namespace SwashbuckleVsNSwag.Swashbuckle.Tests { - public class ProductConsollerTest + public class ProductControllerTest { private Mock> _logger; private Mock _productRepository; diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swachbuckle.Tests/SwashbuckleVsNSwag.Swachbuckle.Tests.csproj b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle.Tests/SwashbuckleVsNSwag.Swashbuckle.Tests.csproj similarity index 65% rename from dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swachbuckle.Tests/SwashbuckleVsNSwag.Swachbuckle.Tests.csproj rename to dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle.Tests/SwashbuckleVsNSwag.Swashbuckle.Tests.csproj index 23d5cc3923..c2c42f5e93 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swachbuckle.Tests/SwashbuckleVsNSwag.Swachbuckle.Tests.csproj +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle.Tests/SwashbuckleVsNSwag.Swashbuckle.Tests.csproj @@ -1,7 +1,7 @@ - net7.0 + net10.0 enable enable @@ -9,12 +9,12 @@ - + - - - - + + + + diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swachbuckle.Tests/Usings.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle.Tests/Usings.cs similarity index 100% rename from dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swachbuckle.Tests/Usings.cs rename to dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle.Tests/Usings.cs diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle/Program.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle/Program.cs index bc142c61dd..6662f63eaa 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle/Program.cs +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle/Program.cs @@ -1,4 +1,4 @@ -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using SwashbuckleVsNSwag.Repositories.CustomerRepository; using SwashbuckleVsNSwag.Repositories.OrderRepository; using SwashbuckleVsNSwag.Repositories.ProductRepository; diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle/SwashbuckleVsNSwag.Swashbuckle.csproj b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle/SwashbuckleVsNSwag.Swashbuckle.csproj index f70450324c..1f0f417d77 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle/SwashbuckleVsNSwag.Swashbuckle.csproj +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.Swashbuckle/SwashbuckleVsNSwag.Swashbuckle.csproj @@ -1,14 +1,14 @@ - net7.0 + net10.0 enable enable - - + + diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.sln b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.sln index af122e091d..e287696fc3 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.sln +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag.sln @@ -25,44 +25,132 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SwashbuckleVsNSwag.Benchmar EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{D811AB7B-F881-4AE0-B0E3-9B02309079A2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SwashbuckleVsNSwag.Swachbuckle.Tests", "SwashbuckleVsNSwag.Swachbuckle.Tests\SwashbuckleVsNSwag.Swachbuckle.Tests.csproj", "{554FF5E1-32E2-41C4-A3C2-E3BB3A6DD260}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SwashbuckleVsNSwag.Swashbuckle.Tests", "SwashbuckleVsNSwag.Swashbuckle.Tests\SwashbuckleVsNSwag.Swashbuckle.Tests.csproj", "{554FF5E1-32E2-41C4-A3C2-E3BB3A6DD260}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SwashbuckleVsNSwag.NSwag.Tests", "SwashbuckleVsNSwag.NSwag.Tests\SwashbuckleVsNSwag.NSwag.Tests.csproj", "{A6BF4305-EC13-4AAD-B206-393EE2428219}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SwashbuckleVsNSwag.BuiltIn", "SwashbuckleVsNSwag.BuiltIn\SwashbuckleVsNSwag.BuiltIn.csproj", "{2F5A498E-811D-4BCF-B80E-4473F31B1093}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SwashbuckleVsNSwagTests", "SwashbuckleVsNSwagTests\SwashbuckleVsNSwagTests.csproj", "{90546461-6C4D-4CFE-AE52-EDB3D8991367}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {C1D99F47-4DB0-4351-9FBE-C323AF28B589}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C1D99F47-4DB0-4351-9FBE-C323AF28B589}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C1D99F47-4DB0-4351-9FBE-C323AF28B589}.Debug|x64.ActiveCfg = Debug|Any CPU + {C1D99F47-4DB0-4351-9FBE-C323AF28B589}.Debug|x64.Build.0 = Debug|Any CPU + {C1D99F47-4DB0-4351-9FBE-C323AF28B589}.Debug|x86.ActiveCfg = Debug|Any CPU + {C1D99F47-4DB0-4351-9FBE-C323AF28B589}.Debug|x86.Build.0 = Debug|Any CPU {C1D99F47-4DB0-4351-9FBE-C323AF28B589}.Release|Any CPU.ActiveCfg = Release|Any CPU {C1D99F47-4DB0-4351-9FBE-C323AF28B589}.Release|Any CPU.Build.0 = Release|Any CPU + {C1D99F47-4DB0-4351-9FBE-C323AF28B589}.Release|x64.ActiveCfg = Release|Any CPU + {C1D99F47-4DB0-4351-9FBE-C323AF28B589}.Release|x64.Build.0 = Release|Any CPU + {C1D99F47-4DB0-4351-9FBE-C323AF28B589}.Release|x86.ActiveCfg = Release|Any CPU + {C1D99F47-4DB0-4351-9FBE-C323AF28B589}.Release|x86.Build.0 = Release|Any CPU {77D4DC0D-2DCE-439A-AA77-A164C1317FAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {77D4DC0D-2DCE-439A-AA77-A164C1317FAD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {77D4DC0D-2DCE-439A-AA77-A164C1317FAD}.Debug|x64.ActiveCfg = Debug|Any CPU + {77D4DC0D-2DCE-439A-AA77-A164C1317FAD}.Debug|x64.Build.0 = Debug|Any CPU + {77D4DC0D-2DCE-439A-AA77-A164C1317FAD}.Debug|x86.ActiveCfg = Debug|Any CPU + {77D4DC0D-2DCE-439A-AA77-A164C1317FAD}.Debug|x86.Build.0 = Debug|Any CPU {77D4DC0D-2DCE-439A-AA77-A164C1317FAD}.Release|Any CPU.ActiveCfg = Release|Any CPU {77D4DC0D-2DCE-439A-AA77-A164C1317FAD}.Release|Any CPU.Build.0 = Release|Any CPU + {77D4DC0D-2DCE-439A-AA77-A164C1317FAD}.Release|x64.ActiveCfg = Release|Any CPU + {77D4DC0D-2DCE-439A-AA77-A164C1317FAD}.Release|x64.Build.0 = Release|Any CPU + {77D4DC0D-2DCE-439A-AA77-A164C1317FAD}.Release|x86.ActiveCfg = Release|Any CPU + {77D4DC0D-2DCE-439A-AA77-A164C1317FAD}.Release|x86.Build.0 = Release|Any CPU {4DCE704D-783F-4D0C-990A-FAA33E7B0D3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4DCE704D-783F-4D0C-990A-FAA33E7B0D3D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4DCE704D-783F-4D0C-990A-FAA33E7B0D3D}.Debug|x64.ActiveCfg = Debug|Any CPU + {4DCE704D-783F-4D0C-990A-FAA33E7B0D3D}.Debug|x64.Build.0 = Debug|Any CPU + {4DCE704D-783F-4D0C-990A-FAA33E7B0D3D}.Debug|x86.ActiveCfg = Debug|Any CPU + {4DCE704D-783F-4D0C-990A-FAA33E7B0D3D}.Debug|x86.Build.0 = Debug|Any CPU {4DCE704D-783F-4D0C-990A-FAA33E7B0D3D}.Release|Any CPU.ActiveCfg = Release|Any CPU {4DCE704D-783F-4D0C-990A-FAA33E7B0D3D}.Release|Any CPU.Build.0 = Release|Any CPU + {4DCE704D-783F-4D0C-990A-FAA33E7B0D3D}.Release|x64.ActiveCfg = Release|Any CPU + {4DCE704D-783F-4D0C-990A-FAA33E7B0D3D}.Release|x64.Build.0 = Release|Any CPU + {4DCE704D-783F-4D0C-990A-FAA33E7B0D3D}.Release|x86.ActiveCfg = Release|Any CPU + {4DCE704D-783F-4D0C-990A-FAA33E7B0D3D}.Release|x86.Build.0 = Release|Any CPU {1DA92176-6C46-422A-A59A-85958BACDA67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1DA92176-6C46-422A-A59A-85958BACDA67}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1DA92176-6C46-422A-A59A-85958BACDA67}.Debug|x64.ActiveCfg = Debug|Any CPU + {1DA92176-6C46-422A-A59A-85958BACDA67}.Debug|x64.Build.0 = Debug|Any CPU + {1DA92176-6C46-422A-A59A-85958BACDA67}.Debug|x86.ActiveCfg = Debug|Any CPU + {1DA92176-6C46-422A-A59A-85958BACDA67}.Debug|x86.Build.0 = Debug|Any CPU {1DA92176-6C46-422A-A59A-85958BACDA67}.Release|Any CPU.ActiveCfg = Release|Any CPU {1DA92176-6C46-422A-A59A-85958BACDA67}.Release|Any CPU.Build.0 = Release|Any CPU + {1DA92176-6C46-422A-A59A-85958BACDA67}.Release|x64.ActiveCfg = Release|Any CPU + {1DA92176-6C46-422A-A59A-85958BACDA67}.Release|x64.Build.0 = Release|Any CPU + {1DA92176-6C46-422A-A59A-85958BACDA67}.Release|x86.ActiveCfg = Release|Any CPU + {1DA92176-6C46-422A-A59A-85958BACDA67}.Release|x86.Build.0 = Release|Any CPU {3E87ECED-4DF0-4E1B-932D-1E3F5178BB7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3E87ECED-4DF0-4E1B-932D-1E3F5178BB7C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3E87ECED-4DF0-4E1B-932D-1E3F5178BB7C}.Debug|x64.ActiveCfg = Debug|Any CPU + {3E87ECED-4DF0-4E1B-932D-1E3F5178BB7C}.Debug|x64.Build.0 = Debug|Any CPU + {3E87ECED-4DF0-4E1B-932D-1E3F5178BB7C}.Debug|x86.ActiveCfg = Debug|Any CPU + {3E87ECED-4DF0-4E1B-932D-1E3F5178BB7C}.Debug|x86.Build.0 = Debug|Any CPU {3E87ECED-4DF0-4E1B-932D-1E3F5178BB7C}.Release|Any CPU.ActiveCfg = Release|Any CPU {3E87ECED-4DF0-4E1B-932D-1E3F5178BB7C}.Release|Any CPU.Build.0 = Release|Any CPU + {3E87ECED-4DF0-4E1B-932D-1E3F5178BB7C}.Release|x64.ActiveCfg = Release|Any CPU + {3E87ECED-4DF0-4E1B-932D-1E3F5178BB7C}.Release|x64.Build.0 = Release|Any CPU + {3E87ECED-4DF0-4E1B-932D-1E3F5178BB7C}.Release|x86.ActiveCfg = Release|Any CPU + {3E87ECED-4DF0-4E1B-932D-1E3F5178BB7C}.Release|x86.Build.0 = Release|Any CPU {554FF5E1-32E2-41C4-A3C2-E3BB3A6DD260}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {554FF5E1-32E2-41C4-A3C2-E3BB3A6DD260}.Debug|Any CPU.Build.0 = Debug|Any CPU + {554FF5E1-32E2-41C4-A3C2-E3BB3A6DD260}.Debug|x64.ActiveCfg = Debug|Any CPU + {554FF5E1-32E2-41C4-A3C2-E3BB3A6DD260}.Debug|x64.Build.0 = Debug|Any CPU + {554FF5E1-32E2-41C4-A3C2-E3BB3A6DD260}.Debug|x86.ActiveCfg = Debug|Any CPU + {554FF5E1-32E2-41C4-A3C2-E3BB3A6DD260}.Debug|x86.Build.0 = Debug|Any CPU {554FF5E1-32E2-41C4-A3C2-E3BB3A6DD260}.Release|Any CPU.ActiveCfg = Release|Any CPU {554FF5E1-32E2-41C4-A3C2-E3BB3A6DD260}.Release|Any CPU.Build.0 = Release|Any CPU + {554FF5E1-32E2-41C4-A3C2-E3BB3A6DD260}.Release|x64.ActiveCfg = Release|Any CPU + {554FF5E1-32E2-41C4-A3C2-E3BB3A6DD260}.Release|x64.Build.0 = Release|Any CPU + {554FF5E1-32E2-41C4-A3C2-E3BB3A6DD260}.Release|x86.ActiveCfg = Release|Any CPU + {554FF5E1-32E2-41C4-A3C2-E3BB3A6DD260}.Release|x86.Build.0 = Release|Any CPU {A6BF4305-EC13-4AAD-B206-393EE2428219}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A6BF4305-EC13-4AAD-B206-393EE2428219}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A6BF4305-EC13-4AAD-B206-393EE2428219}.Debug|x64.ActiveCfg = Debug|Any CPU + {A6BF4305-EC13-4AAD-B206-393EE2428219}.Debug|x64.Build.0 = Debug|Any CPU + {A6BF4305-EC13-4AAD-B206-393EE2428219}.Debug|x86.ActiveCfg = Debug|Any CPU + {A6BF4305-EC13-4AAD-B206-393EE2428219}.Debug|x86.Build.0 = Debug|Any CPU {A6BF4305-EC13-4AAD-B206-393EE2428219}.Release|Any CPU.ActiveCfg = Release|Any CPU {A6BF4305-EC13-4AAD-B206-393EE2428219}.Release|Any CPU.Build.0 = Release|Any CPU + {A6BF4305-EC13-4AAD-B206-393EE2428219}.Release|x64.ActiveCfg = Release|Any CPU + {A6BF4305-EC13-4AAD-B206-393EE2428219}.Release|x64.Build.0 = Release|Any CPU + {A6BF4305-EC13-4AAD-B206-393EE2428219}.Release|x86.ActiveCfg = Release|Any CPU + {A6BF4305-EC13-4AAD-B206-393EE2428219}.Release|x86.Build.0 = Release|Any CPU + {2F5A498E-811D-4BCF-B80E-4473F31B1093}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2F5A498E-811D-4BCF-B80E-4473F31B1093}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2F5A498E-811D-4BCF-B80E-4473F31B1093}.Debug|x64.ActiveCfg = Debug|Any CPU + {2F5A498E-811D-4BCF-B80E-4473F31B1093}.Debug|x64.Build.0 = Debug|Any CPU + {2F5A498E-811D-4BCF-B80E-4473F31B1093}.Debug|x86.ActiveCfg = Debug|Any CPU + {2F5A498E-811D-4BCF-B80E-4473F31B1093}.Debug|x86.Build.0 = Debug|Any CPU + {2F5A498E-811D-4BCF-B80E-4473F31B1093}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2F5A498E-811D-4BCF-B80E-4473F31B1093}.Release|Any CPU.Build.0 = Release|Any CPU + {2F5A498E-811D-4BCF-B80E-4473F31B1093}.Release|x64.ActiveCfg = Release|Any CPU + {2F5A498E-811D-4BCF-B80E-4473F31B1093}.Release|x64.Build.0 = Release|Any CPU + {2F5A498E-811D-4BCF-B80E-4473F31B1093}.Release|x86.ActiveCfg = Release|Any CPU + {2F5A498E-811D-4BCF-B80E-4473F31B1093}.Release|x86.Build.0 = Release|Any CPU + {90546461-6C4D-4CFE-AE52-EDB3D8991367}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {90546461-6C4D-4CFE-AE52-EDB3D8991367}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90546461-6C4D-4CFE-AE52-EDB3D8991367}.Debug|x64.ActiveCfg = Debug|Any CPU + {90546461-6C4D-4CFE-AE52-EDB3D8991367}.Debug|x64.Build.0 = Debug|Any CPU + {90546461-6C4D-4CFE-AE52-EDB3D8991367}.Debug|x86.ActiveCfg = Debug|Any CPU + {90546461-6C4D-4CFE-AE52-EDB3D8991367}.Debug|x86.Build.0 = Debug|Any CPU + {90546461-6C4D-4CFE-AE52-EDB3D8991367}.Release|Any CPU.ActiveCfg = Release|Any CPU + {90546461-6C4D-4CFE-AE52-EDB3D8991367}.Release|Any CPU.Build.0 = Release|Any CPU + {90546461-6C4D-4CFE-AE52-EDB3D8991367}.Release|x64.ActiveCfg = Release|Any CPU + {90546461-6C4D-4CFE-AE52-EDB3D8991367}.Release|x64.Build.0 = Release|Any CPU + {90546461-6C4D-4CFE-AE52-EDB3D8991367}.Release|x86.ActiveCfg = Release|Any CPU + {90546461-6C4D-4CFE-AE52-EDB3D8991367}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -71,6 +159,7 @@ Global {3E87ECED-4DF0-4E1B-932D-1E3F5178BB7C} = {D811AB7B-F881-4AE0-B0E3-9B02309079A2} {554FF5E1-32E2-41C4-A3C2-E3BB3A6DD260} = {D811AB7B-F881-4AE0-B0E3-9B02309079A2} {A6BF4305-EC13-4AAD-B206-393EE2428219} = {D811AB7B-F881-4AE0-B0E3-9B02309079A2} + {90546461-6C4D-4CFE-AE52-EDB3D8991367} = {D811AB7B-F881-4AE0-B0E3-9B02309079A2} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {41376AFE-D97C-4240-9A7A-E5CE2684DE40} diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/Controllers/WeatherForecastController.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/Controllers/WeatherForecastController.cs deleted file mode 100644 index bb96c2f8c1..0000000000 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/Controllers/WeatherForecastController.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Microsoft.AspNetCore.Mvc; - -namespace SwashbuckleVsNSwag.Controllers -{ - [ApiController] - [Route("[controller]")] - public class WeatherForecastController : ControllerBase - { - private static readonly string[] Summaries = new[] - { - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - }; - - private readonly ILogger _logger; - - public WeatherForecastController(ILogger logger) - { - _logger = logger; - } - - [HttpGet] - public IEnumerable Get() - { - return Enumerable.Range(1, 5).Select(index => new WeatherForecast - { - Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), - TemperatureC = Random.Shared.Next(-20, 55), - Summary = Summaries[Random.Shared.Next(Summaries.Length)] - }) - .ToArray(); - } - } -} \ No newline at end of file diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/Program.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/Program.cs deleted file mode 100644 index ac7c10a1e7..0000000000 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/Program.cs +++ /dev/null @@ -1,17 +0,0 @@ -var builder = WebApplication.CreateBuilder(args); - -// Add services to the container. - -builder.Services.AddControllers(); - -var app = builder.Build(); - -// Configure the HTTP request pipeline. - -app.UseHttpsRedirection(); - -app.UseAuthorization(); - -app.MapControllers(); - -app.Run(); diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/SwashbuckleVsNSwag.csproj b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/SwashbuckleVsNSwag.csproj deleted file mode 100644 index 4c2bb77d01..0000000000 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/SwashbuckleVsNSwag.csproj +++ /dev/null @@ -1,9 +0,0 @@ - - - - net7.0 - enable - enable - - - diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/WeatherForecast.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/WeatherForecast.cs deleted file mode 100644 index aad3e741ca..0000000000 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwag/WeatherForecast.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace SwashbuckleVsNSwag -{ - public class WeatherForecast - { - public DateOnly Date { get; set; } - - public int TemperatureC { get; set; } - - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - - public string? Summary { get; set; } - } -} \ No newline at end of file diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwagTests/BuiltInOpenApiTests.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwagTests/BuiltInOpenApiTests.cs new file mode 100644 index 0000000000..34b3a33ac3 --- /dev/null +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwagTests/BuiltInOpenApiTests.cs @@ -0,0 +1,54 @@ +using System.Net; +using Microsoft.AspNetCore.Mvc.Testing; + +namespace SwashbuckleVsNSwagTests +{ + public class BuiltInOpenApiTests + { + private WebApplicationFactory _factory = null!; + private HttpClient _client = null!; + + [SetUp] + public void Setup() + { + _factory = new WebApplicationFactory(); + _client = _factory.CreateClient(); + } + + [TearDown] + public void TearDown() + { + _client.Dispose(); + _factory.Dispose(); + } + + [Test] + public async Task WhenRequestingTheJsonDocument_ThenItDescribesTheApi() + { + var response = await _client.GetAsync("/openapi/v1.json"); + var body = await response.Content.ReadAsStringAsync(); + + Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); + Assert.That(body, Does.Contain("\"openapi\"")); + Assert.That(body, Does.Contain("/Customer")); + } + + [Test] + public async Task WhenRequestingTheYamlDocument_ThenItIsServed() + { + var response = await _client.GetAsync("/openapi/v1.yaml"); + var body = await response.Content.ReadAsStringAsync(); + + Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); + Assert.That(body, Does.StartWith("openapi:")); + } + + [Test] + public async Task WhenRequestingSwaggerUi_ThenThePageIsServed() + { + var response = await _client.GetAsync("/swagger/index.html"); + + Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); + } + } +} diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwagTests/SwashbuckleTests.cs b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwagTests/SwashbuckleTests.cs deleted file mode 100644 index ad1e1de74e..0000000000 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwagTests/SwashbuckleTests.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Moq; - -namespace SwashbuckleVsNSwagTests -{ - public class SwashbuckleTests - { - private Mock - - [SetUp] - public void Setup() - { - } - - [Test] - public void Test1() - { - Assert.Pass(); - } - } -} \ No newline at end of file diff --git a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwagTests/SwashbuckleVsNSwagTests.csproj b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwagTests/SwashbuckleVsNSwagTests.csproj index d6c44d7937..83a1fecdfc 100644 --- a/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwagTests/SwashbuckleVsNSwagTests.csproj +++ b/dotnet-client-libraries/SwashbuckleVsNSwag/SwashbuckleVsNSwagTests/SwashbuckleVsNSwagTests.csproj @@ -1,7 +1,7 @@ - net7.0 + net10.0 enable enable @@ -9,12 +9,16 @@ - - - - - - + + + + + + + + + +