From b96786c37194b29897ccd3ccc86a8ac69bb3492a Mon Sep 17 00:00:00 2001 From: JustArchi Date: Sun, 29 Dec 2019 20:45:31 +0100 Subject: [PATCH] Add support for Newtonsoft.Json to Swagger --- ArchiSteamFarm/ArchiSteamFarm.csproj | 1 + ArchiSteamFarm/IPC/Startup.cs | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ArchiSteamFarm/ArchiSteamFarm.csproj b/ArchiSteamFarm/ArchiSteamFarm.csproj index 4bb62f030..897d0f309 100644 --- a/ArchiSteamFarm/ArchiSteamFarm.csproj +++ b/ArchiSteamFarm/ArchiSteamFarm.csproj @@ -68,6 +68,7 @@ + lib\SteamKit2.dll diff --git a/ArchiSteamFarm/IPC/Startup.cs b/ArchiSteamFarm/IPC/Startup.cs index 4744d6635..c9287236c 100644 --- a/ArchiSteamFarm/IPC/Startup.cs +++ b/ArchiSteamFarm/IPC/Startup.cs @@ -35,6 +35,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.OpenApi.Models; using Newtonsoft.Json; +using Newtonsoft.Json.Converters; using Newtonsoft.Json.Serialization; namespace ArchiSteamFarm.IPC { @@ -108,7 +109,14 @@ namespace ArchiSteamFarm.IPC { app.UseSwagger(); // Use friendly swagger UI - app.UseSwaggerUI(options => options.SwaggerEndpoint("/swagger/" + SharedInfo.ASF + "/swagger.json", SharedInfo.ASF + " API")); + app.UseSwaggerUI( + options => { + options.DisplayRequestDuration(); + options.EnableDeepLinking(); + options.ShowExtensions(); + options.SwaggerEndpoint("/swagger/" + SharedInfo.ASF + "/swagger.json", SharedInfo.ASF + " API"); + } + ); } public void ConfigureServices(IServiceCollection services) { @@ -156,7 +164,7 @@ namespace ArchiSteamFarm.IPC { } ); - options.EnableAnnotations(); + options.EnableAnnotations(true); options.SwaggerDoc( SharedInfo.ASF, new OpenApiInfo { @@ -182,6 +190,9 @@ namespace ArchiSteamFarm.IPC { } ); + // Add Newtonsoft.Json support for SwaggerGen, this one must be executed after AddSwaggerGen() + services.AddSwaggerGenNewtonsoftSupport(); + // We need MVC for /Api, but we're going to use only a small subset of all available features #if NETFRAMEWORK IMvcCoreBuilder mvc = services.AddMvcCore(); @@ -220,6 +231,7 @@ namespace ArchiSteamFarm.IPC { #endif options => { options.SerializerSettings.ContractResolver = new DefaultContractResolver(); + options.SerializerSettings.Converters.Add(new StringEnumConverter()); if (Debugging.IsUserDebugging) { options.SerializerSettings.Formatting = Formatting.Indented;