我有此操作方法:
[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
标头?理想情况下,如果我在动作方法中设置一个断点,它甚至都不会受到打击。
如何在API方法中进行简单检查: