【发布时间】:2020-02-12 16:29:25
【问题描述】:
我有这个动作方法:
[HttpGet]
public virtual async Task<IActionResult> GetModifiedSince([HeaderCompanyId] Guid? xCompanyId)
{
...
}
上述action方法中的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 标头?
理想情况下,如果我在 action 方法中设置断点,它甚至不应该被命中。
【问题讨论】:
-
您的所有请求中是否需要此 xCompanyId 或只是您的应用程序中的某些操作?
-
所有请求都需要。
-
@DavidKlempfner 确实找到了解决方案?
标签: c# http asp.net-core asp.net-core-2.1