Swagger 招摇过市文档:招摇过市(隐藏方法/属性)

Swagger 招摇过市文档:招摇过市(隐藏方法/属性),swagger,swashbuckle,Swagger,Swashbuckle,我正在使用Swagger生成文档。我的控制器中有一些方法,模型中有一些属性我不想记录。 是否有任何arrtibute或属性可以保留或忽略文档中的特定方法?对于该方法,您有两个选项: 使用过时属性。然后,您必须设置操作-c.ignoreobsoletActions()在招摇过市配置中 创建自定义属性和招摇过市文档过滤器。如果方法具有自定义属性,文档过滤器应该遍历每个方法并删除方法文档 对于属性,您可以使用JsonIgnoreAttribute除了c.IgnoreObsoleteActions(),

我正在使用Swagger生成文档。我的控制器中有一些方法,模型中有一些属性我不想记录。
是否有任何arrtibute或属性可以保留或忽略文档中的特定方法?

对于该方法,您有两个选项:

  • 使用过时属性。然后,您必须设置操作-
    c.ignoreobsoletActions()在招摇过市配置中

  • 创建自定义属性和招摇过市文档过滤器。如果方法具有自定义属性,文档过滤器应该遍历每个方法并删除方法文档


  • 对于属性,您可以使用
    JsonIgnoreAttribute

    除了
    c.IgnoreObsoleteActions()
    ,还有
    c.IgnoreObsoleteProperties()
    ,它从文档中隐藏属性


    JsonIgnoreAttribute
    将在作为POST请求正文的一部分接收时停止属性反序列化,如果您只希望更改文档而不希望更改功能,则这可能不是您想要的。

    在较新版本的Swashback(Core2/3)中
    XmlIgnore/JsonIgnore
    似乎不适用于属性。
    或者,您可以将“属性访问”修改器更改为
    internal
    。这将防止序列化和生成文档

    我不确定是否要隐藏整个控制器,您可能需要在您的招摇过市设置中添加过滤器。我确实有一个隐藏某些端点的示例(为了方便起见,我为本地运行添加了前缀路由):

    public void配置服务(IServiceCollection服务)
    {
    ...
    services.AddSwaggerGen(配置=>{
    config.SwaggerDoc(“v1”,
    新OpenApiInfo{
    Version=“v1”,
    Title=“fooapi”,
    Description=“不做任何事情。”,
    Contact=newopenapicontact{
    Name=“否”,
    电子邮件=”mail@example.org",
    },
    });
    //在Swagger文档中包含XML注释
    var xmlFile=$“{Assembly.getExecutionGassembly().GetName().Name}.xml”;
    var xmlPath=Path.Combine(AppContext.BaseDirectory,xmlFile);
    config.includexmlcoments(xmlPath);
    //过滤掉带前缀的路由
    config.DocInclusionPredicate(
    (名称,desc)=>!desc.RelativePath.ToLower().StartsWith(“MyDevPrefix”);
    });
    }
    
    只是一个注意事项,因为我还试图找出不起作用的属性的JsonIgnore

    问题似乎在于.Net Core的新版本Swashback不支持NewtonSoft开箱即用

    • 从NuGet安装

      Package Manager : Install-Package Swashbuckle.AspNetCore.Newtonsoft -Version 5.6.2
      CLI : dotnet add package --version 5.6.2 Swashbuckle.AspNetCore.Newtonsoft
      
    • 将代码添加到startup.cs

      services.AddSwaggerGen(c =>
      {
          c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
      });
      services.AddSwaggerGenNewtonsoftSupport(); // explicit opt-in - needs to be placed after AddSwaggerGen()
      

    这对我来说很有效,希望对其他人有所帮助。

    第二种方法有什么例子吗?我使用decorator[Obsolete]作为我想要隐藏在swagger中的属性,并在启动时放置c.IgnoreObsoletProperties()。虽然属性隐藏在swagger中,但在响应中仍然可见。我使用asp.net内核。如何在swagger中隐藏一个对用户完全可见的属性?如果您也试图隐藏响应,我认为您希望像Simlly John的回答一样,对属性使用JsonIgnoreAttribute