У меня есть этот метод действия:
[HttpGet]
public virtual async Task<IActionResult> GetModifiedSince([HeaderCompanyId] Guid? xCompanyId)
{
...
}
Класс HeaderCompanyId
в вышеуказанном методе действия определен здесь:
public class HeaderCompanyIdAttribute : FromHeaderAttribute
{
public HeaderCompanyIdAttribute()
{
Name = "x-company-id";
}
}
Я использую это IOperationFilter
для сделайте xCompanyId
обязательным:
public class AddSwaggerToStandardHeadersFilter : IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{
var companyIdHeader = operation.Parameters.FirstOrDefault(x => x.Name == "x-company-id");
if (companyIdHeader != null)
{
companyIdHeader.Description = "Company id";
companyIdHeader.Required = true;
}
}
}
Здесь я добавляю OperationFilter
:
public static IServiceCollection RegisterSwagger(this IServiceCollection services) =>
services.AddSwaggerGen(setupAction =>
{
...
setupAction.OperationFilter<AddSwaggerToStandardHeadersFilter>();
}
}
Я вижу заголовок, помеченный как обязательный в Swagger UI. Но когда я нажимаю на конечную точку без значения для xCompanyId
, ModelState.IsValid = true
и не получаю сообщение об ошибке о необходимости заголовка.
Как я могу вернуть 4XX, чтобы указать, что Заголовок xCompanyId
нужен? В идеале, если я добавлю точку останова в метод действия, он даже не должен получить удар.