为了账号安全,请及时绑定邮箱和手机立即绑定

如何组合 Swashbuckle 过滤器?

如何组合 Swashbuckle 过滤器?

C#
30秒到达战场 2022-12-24 10:27:29
我需要的是使用一些条件来隐藏或显示模型中模型的某些属性|Swagger UI 中响应的示例值。这怎么可能实现呢?我的条件基于 api 操作的属性和 DTO 的属性。所以,fe,如果一个动作提供了一个属性,那么我们应该只在 Swagger UI 中看到标记的属性。
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

解决了。您只需要实施IOperationFilter并注册它。这个东西允许您为同一模型显示定制的不同示例。


数据传输协议


public class MyDTO

{

    public int Id { get; set; }


    [ShortModelMember]

    public string Name { get; set; }

    ...

}   

API控制器中的方法


[HttpGet]

[ReturnShortModel]

public MyDTO GetSmthg()

{

    return MyDTO.GetExample();

}   

Swagger的自定义操作过滤器


public class SwaggerExcludeFilter : IOperationFilter

{

    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)

    {

        if (!apiDescription.GetControllerAndActionAttributes<ReturnShortModelAttribute>().Any())

        {

            return;

        }


        var responseType = apiDescription.ResponseDescription.DeclaredType;

        var description = $"OK (uses a short model of {responseType})";

        var props = responseType

                    .GetProperties()

                    .Where(p => p.GetCustomAttributes(typeof(ShortModelMemberAttribute)).Any())

                    .ToDictionary(p => p.Name, p.PropertyType.Name);

        }


        operation.responses.Clear();

        operation.responses.Add("200", new Response

        {

            description = description,

            schema = new Schema

            {

                example = props,

            },

        });

    }

}   

最后


c.OperationFilter<SwaggerExcludeFilter>();   


查看完整回答
反对 回复 2022-12-24
  • 1 回答
  • 0 关注
  • 60 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信