我搜索了可能的方法来添加一个请求标头参数,该参数将自动添加到我的web-api
中的每个方法,但我找不到一个明确的方法。
在搜索时我发现OperationFilter()
方法必须对此做些什么。
是的,你可以通过继承IOperationFilter
来做到这一点
你可以在这里找到关于GitHub的答案:AddRequiredHeaderParameter
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Swashbuckle.AspNetCore.Swagger;
using Swashbuckle.AspNetCore.SwaggerGen;
public class AddRequiredHeaderParameter : IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{
if (operation.Parameters == null)
operation.Parameters = new List<IParameter>();
operation.Parameters.Add(new NonBodyParameter
{
Name = "X-User-Token",
In = "header",
Type = "string",
Required = false
});
}
}
然后你去你的SwaggerConfig.cs
文件并在AddSwaggerGen
部分添加以下内容:
c.OperationFilter<AddRequiredHeaderParameter>();
重建,享受。
我不得不这样做略有不同,不知道为什么。这是我添加标头值所做的:
这被添加到我的swagger配置中:
c.OperationFilter<AddRequiredHeaderParameter>();
这是班级:
public class AddRequiredHeaderParameter : IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{
operation.Parameters.Add(new NonBodyParameter
{
Name = "X-MYHEADER",
In = "header",
Type = "string",
Required = false
});
}
}
您也可以使用基本模型类,并使用属性[FromHeader]来获取应在自定义标头中发送的属性。像这样的东西:
public class AuthenticatedRequest
{
[FromHeader(Name = "User-Identity")]
public string UserIdentity { get; set; }
}
至少它适用于ASP.NET Core 2.1和Swashbuckle.AspNetCore 2.5.0。