diff --git a/src/Squidex.Core/Squidex.Core.csproj b/src/Squidex.Core/Squidex.Core.csproj index 06694e052..bb10ba971 100644 --- a/src/Squidex.Core/Squidex.Core.csproj +++ b/src/Squidex.Core/Squidex.Core.csproj @@ -13,8 +13,8 @@ - - + + diff --git a/src/Squidex.Events/Squidex.Events.csproj b/src/Squidex.Events/Squidex.Events.csproj index e9b4fd1df..7a80cf949 100644 --- a/src/Squidex.Events/Squidex.Events.csproj +++ b/src/Squidex.Events/Squidex.Events.csproj @@ -12,6 +12,6 @@ - + diff --git a/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj b/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj index db94e81dc..a52fa4d98 100644 --- a/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj +++ b/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj @@ -12,7 +12,7 @@ - + diff --git a/src/Squidex.Read/Squidex.Read.csproj b/src/Squidex.Read/Squidex.Read.csproj index 447361e27..4a347c975 100644 --- a/src/Squidex.Read/Squidex.Read.csproj +++ b/src/Squidex.Read/Squidex.Read.csproj @@ -15,7 +15,7 @@ - + diff --git a/src/Squidex.Write/Squidex.Write.csproj b/src/Squidex.Write/Squidex.Write.csproj index 6030e32b8..55bc89d81 100644 --- a/src/Squidex.Write/Squidex.Write.csproj +++ b/src/Squidex.Write/Squidex.Write.csproj @@ -14,6 +14,6 @@ - + diff --git a/src/Squidex/Config/Swagger/SwaggerServices.cs b/src/Squidex/Config/Swagger/SwaggerServices.cs index 8eb5836fc..5efde2a63 100644 --- a/src/Squidex/Config/Swagger/SwaggerServices.cs +++ b/src/Squidex/Config/Swagger/SwaggerServices.cs @@ -24,12 +24,12 @@ namespace Squidex.Config.Swagger { public static void AddMySwaggerSettings(this IServiceCollection services) { - services.AddSingleton(typeof(SwaggerOwinSettings), s => + services.AddSingleton(typeof(SwaggerSettings), s => { var urlOptions = s.GetService>().Value; var settings = - new SwaggerOwinSettings { Title = "Squidex API Specification", IsAspNetCore = false } + new SwaggerSettings { Title = "Squidex API Specification", IsAspNetCore = false } .ConfigurePaths(urlOptions) .ConfigureSchemaSettings() .ConfigureIdentity(urlOptions); @@ -40,7 +40,7 @@ namespace Squidex.Config.Swagger services.AddTransient(); } - private static SwaggerOwinSettings ConfigureIdentity(this SwaggerOwinSettings settings, MyUrlsOptions urlOptions) + private static SwaggerSettings ConfigureIdentity(this SwaggerSettings settings, MyUrlsOptions urlOptions) { settings.DocumentProcessors.Add( new SecurityDefinitionAppender(Constants.SecurityDefinition, SwaggerHelper.CreateOAuthSchema(urlOptions))); @@ -50,7 +50,7 @@ namespace Squidex.Config.Swagger return settings; } - private static SwaggerOwinSettings ConfigurePaths(this SwaggerOwinSettings settings, MyUrlsOptions urlOptions) + private static SwaggerSettings ConfigurePaths(this SwaggerSettings settings, MyUrlsOptions urlOptions) { settings.SwaggerRoute = $"{Constants.ApiPrefix}/swagger/v1/swagger.json"; @@ -68,7 +68,7 @@ namespace Squidex.Config.Swagger return settings; } - private static SwaggerOwinSettings ConfigureSchemaSettings(this SwaggerOwinSettings settings) + private static SwaggerSettings ConfigureSchemaSettings(this SwaggerSettings settings) { settings.DefaultEnumHandling = EnumHandling.String; settings.DefaultPropertyNameHandling = PropertyNameHandling.CamelCase; @@ -87,7 +87,7 @@ namespace Squidex.Config.Swagger settings.DocumentProcessors.Add(new XmlTagProcessor()); settings.OperationProcessors.Add(new XmlTagProcessor()); - settings.OperationProcessors.Add(new XmlResponseTypesProcessor()); + settings.OperationProcessors.Add(new XmlResponseTypesProcessor(settings)); return settings; } diff --git a/src/Squidex/Config/Swagger/SwaggerUsage.cs b/src/Squidex/Config/Swagger/SwaggerUsage.cs index c1e1fd57d..b0c1ecc07 100644 --- a/src/Squidex/Config/Swagger/SwaggerUsage.cs +++ b/src/Squidex/Config/Swagger/SwaggerUsage.cs @@ -17,7 +17,7 @@ namespace Squidex.Config.Swagger { public static void UseMySwagger(this IApplicationBuilder app) { - var settings = app.ApplicationServices.GetService(); + var settings = app.ApplicationServices.GetService(); app.UseSwagger(typeof(SwaggerUsage).GetTypeInfo().Assembly, settings); } diff --git a/src/Squidex/Config/Swagger/XmlResponseTypesProcessor.cs b/src/Squidex/Config/Swagger/XmlResponseTypesProcessor.cs index effff9f3a..b31cbbf45 100644 --- a/src/Squidex/Config/Swagger/XmlResponseTypesProcessor.cs +++ b/src/Squidex/Config/Swagger/XmlResponseTypesProcessor.cs @@ -13,6 +13,7 @@ using NJsonSchema; using NJsonSchema.Generation; using NJsonSchema.Infrastructure; using NSwag; +using NSwag.AspNetCore; using NSwag.SwaggerGeneration.Processors; using NSwag.SwaggerGeneration.Processors.Contexts; using Squidex.Controllers.Api; @@ -25,6 +26,13 @@ namespace Squidex.Config.Swagger { private static readonly Regex ResponseRegex = new Regex("(?[0-9]{3}) => (?.*)", RegexOptions.Compiled); + private readonly SwaggerSettings swaggerSettings; + + public XmlResponseTypesProcessor(SwaggerSettings swaggerSettings) + { + this.swaggerSettings = swaggerSettings; + } + public async Task ProcessAsync(OperationProcessorContext context) { var hasOkResponse = false; @@ -62,7 +70,7 @@ namespace Squidex.Config.Swagger return true; } - private static async Task AddInternalErrorResponseAsync(OperationProcessorContext context, SwaggerOperation operation) + private async Task AddInternalErrorResponseAsync(OperationProcessorContext context, SwaggerOperation operation) { if (operation.Responses.ContainsKey("500")) { @@ -70,7 +78,8 @@ namespace Squidex.Config.Swagger } var errorType = typeof(ErrorDto); - var errorSchema = JsonObjectTypeDescription.FromType(errorType, new Attribute[0], EnumHandling.String); + var errorContract = swaggerSettings.ActualContractResolver.ResolveContract(errorType); + var errorSchema = JsonObjectTypeDescription.FromType(errorType, errorContract, new Attribute[0], EnumHandling.String); var response = new SwaggerResponse { Description = "Operation failed." }; diff --git a/src/Squidex/Controllers/ContentApi/Generator/SchemasSwaggerGenerator.cs b/src/Squidex/Controllers/ContentApi/Generator/SchemasSwaggerGenerator.cs index 88909c951..17ebe99cc 100644 --- a/src/Squidex/Controllers/ContentApi/Generator/SchemasSwaggerGenerator.cs +++ b/src/Squidex/Controllers/ContentApi/Generator/SchemasSwaggerGenerator.cs @@ -36,6 +36,7 @@ namespace Squidex.Controllers.ContentApi.Generator { private readonly SwaggerJsonSchemaGenerator schemaGenerator; private readonly SwaggerDocument document = new SwaggerDocument { Tags = new List() }; + private readonly SwaggerSettings swaggerSettings; private readonly HttpContext context; private readonly JsonSchemaResolver schemaResolver; private readonly SwaggerGenerator swaggerGenerator; @@ -46,16 +47,17 @@ namespace Squidex.Controllers.ContentApi.Generator private string appBasePath; private IAppEntity app; - public SchemasSwaggerGenerator(IHttpContextAccessor context, SwaggerOwinSettings swaggerSettings, IOptions urlOptions) + public SchemasSwaggerGenerator(IHttpContextAccessor context, SwaggerSettings settings, IOptions urlOptions) { this.context = context.HttpContext; this.urlOptions = urlOptions.Value; - schemaGenerator = new SwaggerJsonSchemaGenerator(swaggerSettings); - schemaResolver = new SwaggerSchemaResolver(document, swaggerSettings); + schemaGenerator = new SwaggerJsonSchemaGenerator(settings); + schemaResolver = new SwaggerSchemaResolver(document, settings); - swaggerGenerator = new SwaggerGenerator(schemaGenerator, swaggerSettings, schemaResolver); + swaggerSettings = settings; + swaggerGenerator = new SwaggerGenerator(schemaGenerator, settings, schemaResolver); schemaBodyDescription = SwaggerHelper.LoadDocs("schemabody"); schemaQueryDescription = SwaggerHelper.LoadDocs("schemaquery"); @@ -130,7 +132,8 @@ namespace Squidex.Controllers.ContentApi.Generator private async Task GenerateBasicSchemas() { var errorType = typeof(ErrorDto); - var errorSchema = JsonObjectTypeDescription.FromType(errorType, new Attribute[0], EnumHandling.String); + var errorContract = swaggerSettings.ActualContractResolver.ResolveContract(errorType); + var errorSchema = JsonObjectTypeDescription.FromType(errorType, errorContract, new Attribute[0], EnumHandling.String); errorDtoSchema = await swaggerGenerator.GenerateAndAppendSchemaFromTypeAsync(errorType, errorSchema.IsNullable, null); } diff --git a/src/Squidex/Squidex.csproj b/src/Squidex/Squidex.csproj index 27c806a92..597919bd5 100644 --- a/src/Squidex/Squidex.csproj +++ b/src/Squidex/Squidex.csproj @@ -64,9 +64,9 @@ - + - +