当前位置: 首页 > 知识库问答 >
问题:

在招摇中隐藏参数的最佳方法

上官树
2023-03-14

我正在构建一个API,在这里我有几个endpoint,我需要用户ID,所以在从这篇文章中投票最多的答案(而不是被接受的答案)中得到想法后:ASP。NET MVC将对象从自定义操作筛选器传递到操作。

我创建了一个动作过滤器,我可以用[UserIdFromToken]属性来设置它。

所以我基本上是通过这个操作过滤器获得用户ID,它通过这样的方式从授权头获得:

[Authorize]
[UserIdFromToken]
public IActionResult Get(Guid userId /* Got from the [UserIdFromToken] filter */)
{
   return Ok(_userService.Get(userId));
}

唯一的问题是,现在它在我的Swagger文档中将参数userId显示为必需的参数(我根本不想显示),这显然是错误的,因为我不需要授权头之外的任何输入。

有没有办法让我昂首阔步留档清洁器,而不显示此参数?

你认为最好尝试另一种方法来获取用户ID,比如从我上面发送的帖子中获取可接受的选项吗?

共有1个答案

高墨一
2023-03-14

我知道这是一篇老帖子,但是如果有人有类似的问题,你可以通过扩展swashback来创建自己的动作过滤器。AspNetCore。大摇大摆。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();
        }
    }
}

请记住将操作过滤器添加到您的昂首阔步根:

c.OperationFilter<HideUserIdOperationFilter>();
 类似资料:
  • 问题内容: 我是Android开发和实现SSLSockets的新手。经过一些挖掘后,我能够设置一个可以正常工作的简单服务器/客户端。我觉得该实现可能需要花费一些工作,并且在不使用纯文本格式的情况下困扰于如何将密码加载到密钥库中。这是客户端上的一些代码。如您所见,我已将密码硬编码到本地变量中。有没有更好的方法来加载密钥库密码,所以我在代码中没有纯文本格式? 更新: 事实证明,客户端根本不需要知道密钥

  • 本文向大家介绍PowerShell函数参数用星号隐藏的方法,包括了PowerShell函数参数用星号隐藏的方法的使用技巧和注意事项,需要的朋友参考一下 本文介绍在PowerShell中创建函数时,如何让函数的参数输入值的时候自动变成星号。 什么叫自动变成星号呢?举个例子,我们在登录一个邮箱时,输入用户时看到的是明文的,但我们在输入密码时,看到的是一个个增加的星号。在使用PowerShell自定义函

  • 我希望能够使用此枚举定义: ...然而,在参数定义内部,我不断得到错误: 错误: Swager错误:不是有效的参数定义

  • 是否可以(以及如何)指定依赖于另一个给定参数的值的附加参数? 我有一个电话 ,它定义了要设置的付款方式。 现在:如果是直接借记的,则允许(并且需要)更多参数,例如和。如果是其他参数,例如则需要其他参数。 我想摆脱长参数列表(因为这里遗漏了更多参数),但如上所述对它们进行分组,并记录某些参数仅适用于特殊类型是必需的(并且允许的)。 有什么方法可以描述这个吗? 有没有一种方法可以像一个定义中的所有直接

  • 我现在的问题是在同一个endpoint请求中添加多个新列,如果我的if子句变得疯狂,我相信足够多的代码不会对其他团队成员友好地阅读。 谁能建议如何在spring boot应用程序上实现这个动态查询部分。 我的控制器代码片段如下所示:

  • 目标:隐藏页面URL中的键/值对。E、 g.-http://abc.xyz.com/nav/book?clientID=390 我不希望clientID等在URL中可见(安全原因)。我知道http是一种无状态协议。 我尝试过使用HttpSession、Spring@SessionAttributes,目前使用的是Spring“session”作用域bean- 并在我的控制器中使用- 我是否无法隐藏