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

Swagger输出滤波

羊和光
2023-03-14

我想要一种影响swagger输出留档的方法。问题是询问文档的用户只能对swagger中描述的一些方法拥有权限,所以我想从输出中排除特定方法。我认为最糟糕的方法是通过中间件捕获swagger.json请求,然后检查被请求的用户可以访问哪些方法并排除必要的路径。但是我不太喜欢它,所以可能有内置功能来做到这一点?

共有1个答案

贲培
2023-03-14

找到了答案。只需要创建允许编辑输出文档的自定义DocumentFilter:

public class RestrictSwaggerOperationsFilter : IDocumentFilter
{
    private readonly ILogger<RestrictSwaggerOperationsFilter> _logger;
    private readonly IHttpContextAccessor _contextAccessor; // inject service to get HttpContext with user claims
    private readonly IServiceScopeFactory _scope; // service for getting database context

    public RestrictSwaggerOperationsFilter(IHttpContextAccessor httpContextAccessor, IServiceScopeFactory scope, ILogger<RestrictSwaggerOperationsFilter> logger)
    {
        _contextAccessor = httpContextAccessor;
        _logger = logger;
        _scope = scope;
    }

    public void Apply(OpenApiDocument operation, DocumentFilterContext context)
    {
        using (var scope = _scope.CreateScope())
        {
            var dbContext = scope.ServiceProvider.GetService<ApplicationDbContext>();
            // do whatever check you need
            operation.Paths.Remove("key"); // removes specific path by key that represents path to a method
            // DocumentFilterContext contains ActionDescriptor for every API method
        }
    }
}

然后将此过滤器添加Startup.cs处的配置服务

services.AddSwaggerGen(options =>
        {
            options.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
            options.DocumentFilter<RestrictSwaggerOperationsFilter>();
        });

为Swashback工作。AspNetCore版本5.0.0-rc4。对于早期版本,我想也会有类似的解决方案。

 类似资料:
  • When the template is invoked via display() or fetch(), its output can be sent through one or more output filters. This differs from postfilters because postfilters operate on compiled templates before

  • Output filter plugins operate on a template's output, after the template is loaded and executed, but before the output is displayed. 输出过滤器插件的作用是,在装载并执行完一个模板之后显示模板之前,操作该模板的输出。 stringsmarty_outputfilter

  • 更新:我开始怀疑这是否是由于错误: https://github.com/domaindrivendev/Swashbuckle/issues/590 但这里提出的解决办法似乎并没有解决我的问题。 我正在使用SwashBuckle为C#ASP.NETWeb API项目生成API留档。 我的目标是允许以下作为有效URL: 其中必需参数(param1)设置为“foo ”,可选参数(param2)设置为

  • void unregister_outputfilter(string function_name) Use this to dynamically unregister an output filter. 动态注销一个输出过滤器。

  • void register_outputfilter(mixed function) Use this to dynamically register outputfilters to operate on a template's output before it is displayed. See template output filters for more information on

  • 我在keras建立了一个ConvNet,这是其中的两层 第一层大小的输出,我完全理解,因为有8个大小为3x3的过滤器,每个过滤器都被应用于生成单独的特征图,因此 第二层的输出大小为24x24x16,我不理解。由于第二层的每个过滤器将作用于第一层输出的每个特征映射,因此输出的大小不应该是24x24x128吗? 基本上,我不明白一层的输出是如何馈送到另一层的输入的