从NSwag招摇中筛选模式

时间:2019-02-21 10:29:26

标签: asp.net-web-api swagger nswag

我有一个带有API端点的ASP.NET完整框架应用程序。我正在使用NSwag生成一张大笔的文档。全部都可以。

我只需要为端点的一小部分生成一个文档。路径被过滤,但架构未被过滤。如何过滤架构对象以匹配路径过滤?

示例: 我有这个过滤器

df['A'] = df.A.fillna(df.B).fillna(df.D)

    A    B   C   D
0  2.0  2.0 NaN  0
1  3.0  4.0 NaN  1
2  5.0  NaN NaN  5
3  3.0  3.0 NaN  4

启动时是这样的:
fillna

控制器为:

combine_first

然后生成的摇摇晃晃只包含一条路径:

df['A'] = df.A.fillna(df.B.combine_first(df.D))

仅此而已,

但是模式包含以下两者:

INSERT INTO updateuser (user_number) SELECT basicuser.user_num from basicuser 
WHERE `user_num` != '0' ORDER BY `s_no` ASC 

color <- brewer.pal(6,"Spectral") overlap <- read_excel("overlap.xlsx") par(mar=c(3,3,1,1),mgp=c(2,0.9,0),xaxs="i", yaxs="i") overlap.dat <- overlap[overlap$`Countries and areas`=="Pakistan",] overlap.dat <-as.data.frame(t(overlap.dat)) overlap.dat <- as.matrix(overlap.dat, drop=FALSE) overlap.dat <- as.matrix(overlap.dat[-c(1:8,14),], drop=FALSE) colnames(overlap.dat)= overlap[overlap$`Countries and areas`=="Pakistan",]$Year barplot(overlap.dat, main = "Pakistan", col =color, ylim=c(0,100), xlim=c(0,8),cex.names=0.8, names.arg = colnames(overlap.dat), legend=TRUE, args.legend = list(x="topright",y=100, cex=0.8,bty="n"), las=2 ) 类型不应该存在。如何删除它?

如果有10个以上的终结点,并且只有2个通过网关公开,并且以大张旗鼓的形式记录,那么这些额外的数据使“模式”部分变得非常冗长,不适合公共文档。

有一个 public class IncludeControllersInSwagger : IOperationProcessor { public Task<bool> ProcessAsync(OperationProcessorContext context) { return Task.FromResult( context.ControllerType == typeof(ControllerA)); } } ,但没有返回settings.GeneratorSettings.OperationProcessors.Add(new IncludeControllersInSwagger());之类的布尔值。

2 个答案:

答案 0 :(得分:1)

您是否尝试过将操作过滤器添加为第一个元素?

OperationProcessors.Insert(0, new IncludeControllersInSwagger())

我认为这很重要,因为它将在生成dto模式并将其添加到文档之前过滤掉该操作。

答案 1 :(得分:1)

这不是您问题的答案,因为您已经获得了似乎可行的答案。我确实有一个建议。建议您创建一个自定义属性,而不是检查处理器中控制器的类型:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public class IncludeInSwaggerAttribute : Attribute
{
}

然后更改处理器以查找此属性:

public class IncludeInSwaggerOperationProcessor : IOperationProcessor
{
    public async Task<bool> ProcessAsync(OperationProcessorContext context)
    {
        return context.ControllerType.GetCustomAttributes<IncludeInSwaggerAttribute>().Any() || 
               context.MethodInfo.GetCustomAttributes<IncludeInSwaggerAttribute>().Any();
    }
}

通过这种方式,您可以将属性添加到要包括在扩展中的任何新控制器,而无需更改处理器。您还可以在单​​个操作上添加该属性,以仅包括该操作,而使控制器中的其余操作不再摇摇欲坠。