В последней версии Swashbuckle, совместимой с ASP. NET Core 3.1, многие типы были заменены эквивалентными типами в пространстве имен Microsoft.OpenApi.Models
. Поэтому вы не должны больше использовать такие типы, как NonBodyParameter
или IParameter
. Оба они были заменены одним классом OpenApiParameter
.
Ваш код должен выглядеть следующим образом
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Collections.Generic;
namespace Intent2.Auth.Utils
{
public class AddRequiredHeaderParameter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
if (operation.Parameters == null)
operation.Parameters = new List<OpenApiParameter>();
operation.Parameters.Add(new OpenApiParameter()
{
Name = "X-User-Token",
Description = "Access Token",
In = ParameterLocation.Header,
Schema = new OpenApiSchema() { Type = "String" },
Required = true,
Example = new OpenApiString("Tenant ID example")
});
}
}
}
Затем при запуске просто введите SwaggerGen как обычно
services.AddSwaggerGen(options =>
{
options.OperationFilter<AddRequiredHeaderParameter>();
}
Вы даже можете сделать идентификатор арендатора, поступающий извне, как, например, файл конфигурации. Для этого измените ваш AddRequiredHeaderParameter
следующим образом
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System;
using System.Collections.Generic;
namespace Intent2.Auth.Utils
{
public class AddRequiredHeaderParameter : IOperationFilter
{
private string _tenantIdExample;
public AddRequiredHeaderParameter(string tenantIdExample)
{
_tenantIdExample = tenantIdExample ?? throw new ArgumentNullException(nameof(tenantIdExample));
}
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
if (operation.Parameters == null)
operation.Parameters = new List<OpenApiParameter>();
operation.Parameters.Add(new OpenApiParameter()
{
Name = "X-User-Token",
Description = "Access Token",
In = ParameterLocation.Header,
Schema = new OpenApiSchema() { Type = "String" },
Required = true,
Example = new OpenApiString(_tenantIdExample)
});
}
}
}
И назовите его так из своего стартапа
services.AddSwaggerGen(options =>
{
options.OperationFilter<AddRequiredHeaderParameter>("Tenant ID example");
}
Кстати, я думаю, что ваш класс называется AddRequiredHeaderParameter
вы должны установить Required = true
вместо false