Is it possible to configure the output from Litiums swagger implementation?
For example how OperationId is generated and define Response type?
We have a lot of custom API:s and as I understand since 7.4 you need to rely on Litiums swagger implementation.
Litium version: 7.7
From the link that @steve.redstorm provided to an old article you can configure the output with builders, example
public void Configure(OpenApiDocumentBuilder builder)
{
builder.AddModelBuilder<HttpFileContent, HttpFileContentModelBuilder>();
builder.AddModelBuilder<Search.FilterModel, FilterModelModelBuilder>();
// Field framework
builder.AddDocumentFilter<FieldTypeDocumentFilter>();
builder.AddDocumentFilter<OptionFieldTypeDocumentFilter>();
builder.AddModelBuilder<Localization<FieldTemplateFieldGroupLocalization>, FieldTemplateFieldGroupLocalizationModelBuilder>();
builder.AddPropertyModel<MultiCultureFieldContainer, MultiCultureFieldContainerModelBuilder>();
// Security
builder.AddDocumentFilter<SecurityDocumentFilter>();
builder.AddModelFilter<AccessControlListFilter>();
// JSon Patch
builder.AddModelFilter<JsonPatchDocumentSchemaFilter>();
builder.AddDocumentFilter<JsonPatchDocumentSchemaFilter>();
// Dynamic entity condition
builder.AddModelFilter<DynamicEntityConditionFilter>();
//Target group and dynamic group conditions
builder.AddDocumentFilter<GroupConditionsDocumentFilter>();
builder.AddModelFilter<GroupConditionFilter>();
//Dynamic product list conditions
builder.AddDocumentFilter<DynamicProductListConditionsDocumentFilter>();
builder.AddModelFilter<DynamicProductListConditionFilter>();
//Workflow task filter conditions
builder.AddDocumentFilter<WorkflowTaskConditionsDocumentFilter>();
builder.AddModelFilter<WorkflowTaskConditionFilter>();
}
And example of a filter
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
using System.Linq;
using Litium.Runtime;
using Litium.Security;
using Litium.Web.WebApi.OpenApi;
namespace Litium.Web.OpenApi.Filters
{
internal class AccessControlListFilter : IOpenApiModelFilter
{
private readonly OperationDefinitionService _operationDefinitionService;
public AccessControlListFilter(OperationDefinitionService operationDefinitionService)
{
_operationDefinitionService = operationDefinitionService;
}
public void Apply(OpenApiSchema openApiSchema, OpenApiModelFilterContext context)
{
if (context.SystemType.Inherits<AccessControlOperationEntry>())
{
openApiSchema.Properties["operation"] = new OpenApiSchema
{
Type = "string",
Enum = _operationDefinitionService.GetAll()
.OfType<FunctionOperationDefinition>()
.Select(x => new OpenApiString(x.Id))
.Cast<IOpenApiAny>()
.ToList()
};
}
else if (context.SystemType.Inherits<AccessControlEntry>())
{
openApiSchema.Properties["operation"] = new OpenApiSchema
{
Type = "string",
Enum = _operationDefinitionService.GetAll()
.OfType<EntityOperationDefinition>()
.Select(x => new OpenApiString(x.Id))
.Cast<IOpenApiAny>()
.ToList()
};
}
}
}
}
1 Like
system
Closed
4
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.