asp.net 在API/控制器级别使用供应商扩展进行炫耀

wsewodh2  于 2022-11-19  发布在  .NET
关注(0)|答案(1)|浏览(95)

我得到了一个带有一些控制器的Asp.NET web api项目,用swagger-Net启用了swagger doc。我一直在寻找如何启用供应商扩展或自定义swagger doc字段,我可以为每个API级别设置这些字段。我成功地在swagger doc级别/swaggerDoc.info级别设置了供应商扩展。但我不能进一步在API级别设置它们。任何帮助都将不胜感激!
我试着添加供应商扩展到swaggerDoc.info,效果很好。但我不知道如何添加供应商扩展到API级别(PathItem),可以为单个API设置或编辑。基本上我想在API级别启用供应商扩展x-dev的设置。

[HttpGet]
[x-dev("Myself")]
public async Task<User> GetAllUsers(){
.....................
}
svmlkihl

svmlkihl1#

好吧,我找到了一个办法。
假设我想为每个操作添加一个供应商扩展“Squad,”
首先创建一个属性,当我们想把一个特殊的小队分配给一个行动时,我们会用到这个属性。

public class SquadAttribute : Attribute

{

    public string squadName;

    public SquadAttribute(string squadName)

    {

       this.squadName = squadName;

    }

 }

然后在SwaggerConfig.cs中添加操作筛选器,该筛选器将我们的属性作为供应商扩展添加到操作中。

public class SquadOperationFilter : IOperationFilter
    {
        public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
        {
            var sq = apiDescription.GetControllerAndActionAttributes<SquadAttribute>().FirstOrDefault();
            if (sq != null)
            {
                operation.vendorExtensions.Add("x-SquadName", sq.squadName);
                
            }
        }
    }

最后在swagger.config中,应用操作过滤器。

c.OperationFilter<SquadOperationFilter>();

现在您可以为任何openApi操作添加squad属性,如下所示:

[HttpGet]

["Settings"]

[Squad("DevSquad")]

public async Task GetAllSettings()

{

...............................

...............................

}

相关问题