如何使用 swashbuckle 在 post 请求 swagger 描述中隐藏 属性?

How to hide a property just in post request description of swagger using swashbuckle?

我是 ASP.NET Core 的新手,这个问题看起来很简单,但我在网上找不到合适的解决方案。那么问题来了。
这是我正在使用的 class 的结构。

public class Alert
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public string AlertId { get; set; }
    public string Type { get; set; }

}

这是 Post 请求 API 的描述。

{
  "alertId": "string",
  "type": "string"
}

由于我在 post 请求中使用 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 注释 alertId 是可选的。 我的目标是仅从 post 请求描述中隐藏 alertId
我正在使用 ASP.NET Core 3.1、EF Core(3.1.1) 和 Swashbuckle.AspDotNetCore(5.1.0).
请帮助。
谢谢你。

可以在AlertId字段中添加[JsonIgnore]属性,保证post请求不会获取到AlertId的内容。

  public class Alert
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [JsonIgnore]
        public string AlertId { get; set; }
        public string Type { get; set; }

    }

这是测试结果:

你可以使用Swashbuckle.AspNetCore.Annotations包,它允许你标记一些属性只在输入参数中显示,一些属性只在输出中显示。

在你的例子中,你想在post的输入参数中隐藏AlertId,你只需要通过[SwaggerSchema]:

来完成
public class Alert
{
    [SwaggerSchema(ReadOnly = true)]
    public string AlertId { get; set; }
    public string Type { get; set; }
}

Documentation

中查看更多信息

Startup.csConfigureServices 方法中,在 Swagger 配置块中启用注释:

services.AddSwaggerGen(c =>
{
   ...

   c.EnableAnnotations();
});