如何在使用 swashbuckle 的 swagger 的发布请求描述中隐藏属性?
Posted
技术标签:
【中文标题】如何在使用 swashbuckle 的 swagger 的发布请求描述中隐藏属性?【英文标题】:How to hide a property just in post request description of swagger using swashbuckle? 【发布时间】:2020-04-14 19:45:32 【问题描述】:我是 ASP.NET Core 的新手,这个问题看起来很简单,但我在网上找不到合适的解决方案。所以这就是问题所在。 这是我正在使用的类的结构。
public class Alert
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string AlertId get; set;
public string Type get; set;
这是对 swagger 中 Post 请求 API 的描述。
"alertId": "string",
"type": "string"
由于我在 post 请求中使用 [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
注释 alertId
是可选的。
我的目标是仅从帖子请求描述中隐藏alertId
。
我正在使用 ASP.NET Core 3.1、EF Core(3.1.1) 和 Swashbuckle.AspDotNetCore(5.1.0)。
请帮忙。
谢谢你。
【问题讨论】:
最好不要将“警报”对象返回给客户端。您可以创建一个单独的模型(例如“AlertDto”),该模型仅包含您希望在响应中返回的属性。 正如 Ivan 所说,创建一个类来对您需要的用户数据进行建模。获取数据后,可以映射到Alert
实体。
正如 Ivan 所说,创建一个类来对您需要的用户数据进行建模。获取数据后,可以映射到Alert
实体。
我一直在尝试这样做一段时间。我想使用自定义 HttpPostIgnore 属性从 HttpPost 隐藏/排除 ID 属性。但是当我考虑它时,如果我在 Swagger 中有一个 Schema(模型)在不同的方法中的行为与 Schema 部分中记录的方式不同,那将是令人困惑的。我不希望我的 API 太不标准,所以我停止了我的尝试,而是为不同的方法创建单独的 DTO。只是想把我的观点放在那里:)
嗨@mathkid91,我的回答是你想要的吗?
【参考方案1】:
你可以使用Swashbuckle.AspNetCore.Annotations
包,它允许你标记一些属性只显示在输入参数中,一些只显示在输出中。
在你的情况下,你想在帖子的输入参数中隐藏AlertId
,你只需要通过[SwaggerSchema]
来做到这一点:
public class Alert
[SwaggerSchema(ReadOnly = true)]
public string AlertId get; set;
public string Type get; set;
在Documentation中查看更多信息
在Startup.cs
的ConfigureServices
方法中,在Swagger 配置块中启用注释:
services.AddSwaggerGen(c =>
...
c.EnableAnnotations();
);
【讨论】:
您好,感谢您的标签!这听起来像我想要的,但它在我的任何项目中都没有按预期工作 - 至少不是通过安装 NuGet 并添加标签。我将尝试一步一步地按照文档进行检查,以防我在代码中做了一些有趣的事情,或者错过了一些 SwaggerSchema 初始化。 @mathkid91 是的,用c.EnableAnnotations()
初始化【参考方案2】:
可以在AlertId字段中添加[JsonIgnore]
属性,保证post请求不会得到AlertId的内容。
public class Alert
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[JsonIgnore]
public string AlertId get; set;
public string Type get; set;
这里是测试结果:
【讨论】:
以上是关于如何在使用 swashbuckle 的 swagger 的发布请求描述中隐藏属性?的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 swashbuckle 的 swagger 的发布请求描述中隐藏属性?
如何使用 Swashbuckle 从关于 WebAPI 的 Swagger 文档中省略方法
如何使用 Swashbuckle.AspNetCore 隐藏响应代码 200?