C#Swashbuckle:过时的模型属性显示不加任何改动

时间:2018-07-09 08:07:07

标签: c# asp.net-core .net-core swagger swashbuckle

我已经在我的(输入)模型中将某个属性标记为过时

public class MyModel
{
   [Obsolete("Use 'OtherProperty'")]
   public string SomeProperty {get;set;}


   public List<string> OtherProperty {get;set;}
}

但是,摇摇欲坠在两个属性之间没有区别,也没有显示消息。

有什么方法可以招摇我以纪念过时的属性吗?还是我需要自己将其放在属性上方的xml注释中?

3 个答案:

答案 0 :(得分:2)

不幸的是,Swashbuckle尚不支持过时的属性...

我们受到OpenAPI规范的限制,而Swashbuckle仍使用2.0
不推荐使用最接近的方法,但这仅适用于方法,不适用于属性:
https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#operation-object

  • 一种选择是使用IDocumentFilter入侵某些东西,以完全隐藏带有Obsolete标签的那些属性,但这将是一条坎bump的道路。

  • 另一个选择是创建两个方法和两个模型,这样您就可以标记该方法,并且将在其中过渡到该方法,所有内容都将被弃用(我认为这有点混乱)< / em>,但我已经在许多网络API

  • 中看到了这种模式

我认为最好/最简单的解决方案是建议添加一些xml注释,指出不应使用该属性。

答案 1 :(得分:0)

它对我有用,只需用 [Obsolete] 属性(来自 System 命名空间)装饰属性并将 Swagger 标志 IgnoreObsoleteProperties 设置为 true。我还添加了属性 SomePropertySpecified,如果请求中存在 SomeProperty,序列化程序会自动将其设置为 true(空值并不意味着该属性不存在)。如果 SomePropertySpecified 为 true,我有一个自定义逻辑来返回适当的错误消息。

public class Item
{
    [Obsolete]
    public string SomeProperty { get; set; }
    
    [JsonIgnore]
    public bool SomePropertySpecified { get; set; }

    public List<string> OtherProperty { get; set; }
}

类 SwaggerConfig:

public class SwaggerConfig
{
    public static void Register()
    {
        GlobalConfiguration.Configuration 
            .EnableSwagger(c =>
                {
                    c.SingleApiVersion("v1", "Demo");
                    c.IgnoreObsoleteProperties();
                })
            .EnableSwaggerUi(c =>
                {
                    c.DocExpansion(DocExpansion.Full);
                });
    }
}

Swagger 用户界面:

Swagger UI

答案 2 :(得分:0)

[Obsolete]
public string Property {get; set;}
services.AddSwaggerGen(x => 
    // your other settings...
    x.IgnoreObsoleteProperties();
)

这对我有用