我正在构建一个 API,其中有几个端点需要用户 ID,所以在从这篇文章中投票最多的答案(不是被接受的答案)中得到想法后: ASP.NET MVC Pass object from Custom Action Filter to Action .
我创建了一个操作过滤器,我可以使用 [UserIdFromToken]
属性进行设置。
所以我基本上是通过这个 Action Filter 获取用户 ID,它以这种方式从授权 header 中获取它:
[Authorize]
[UserIdFromToken]
public IActionResult Get(Guid userId /* Got from the [UserIdFromToken] filter */)
{
return Ok(_userService.Get(userId));
}
现在唯一的问题是它在我的 Swagger 文档中将参数 userId
显示为必需参数(我根本不想显示它),这显然是错误的,因为我不知道' 需要授权 header 之外的任何输入。
有什么方法可以让我的 swagger 文档更清晰,而不显示此参数?
您是否认为尝试另一种方法来获取 userId
会更好,例如我在上面发送的帖子中接受的选项?
最佳答案
我知道这是一篇旧帖子,但如果有人遇到类似问题,您可以通过扩展 Swashbuckle.AspNetCore.SwaggerGen.IOperationFilter
来创建自己的操作过滤器,如下所示:
public class HideUserIdOperationFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
var scopes = context.MethodInfo
.GetCustomAttributes(true)
.OfType<UserIdFromTokenAttribute>()
.Distinct();
if (scopes.Any())
{
operation.Parameters = operation.Parameters.Where(param => param.Name != "userId").ToList();
}
}
}
请记住将操作过滤器添加到您的 swagger 生成器中:
c.OperationFilter<HideUserIdOperationFilter>();
https://stackoverflow.com/questions/62050435/
相关文章:
reactjs - React Rich Text Editor 真的可以在移动设备上运行吗?
docker - 无法加载动态库 'libcuda.so.1'; dlerror : libcuda
python - psutil.AccessDenied : psutil. AccessDenie
ethereum - 返回错误 : The method web3_clientVersion do
javascript - 创建 React 应用程序 + React lazy + Absolute
docker - 如何处理 make missing from alpine docker imag
python - 在 tensorflow 2.0 中保存和加载模型
graphql-java - 读取通过 GraphQL Java 中的变量传递的字段参数