如何让 Swagger 将对象设置为只读

问题描述 投票:0回答:1

我正在使用 Swagger 和 EF Core,并且正在设置外键。唯一的问题是,当我为 EF Core 设置外键时,Swagger 设置

POST
PUT
的 UI 以包含类对象。我尝试使用
SwaggerSchema
和过滤器将类设置为只读,但当我尝试创建新的类部分时它仍然出现。

如何设置 Swagger,使其知道“类”是只读的,并且不将其包含在

POST
PUT
的 UI 中?

当前

ClassSection
型号:

public class ClassSection
{
    [Key]
    public int Id { get; set; }

    [ForeignKey(nameof(Id))]
    public int ProfessorId { get; set; }

    [ForeignKey("Class")]
    public int ClassId { get; set; }

    [SwaggerSchema(ReadOnly = true)]
    public Class Class { get; set; } 

    [Required]
    public int Section { get; set; }

    [Required]
    public DateTime StartTime { get; set; }

    [Required]
    public DateTime EndTime { get; set; }

    [Required]
    public string Building { get; set; }

    [Required]
    public int Room { get; set; }

    [Required]
    public int Capacity { get; set; }
}

过滤器:

public class SwaggerFilter : ISchemaFilter
{
    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        if (context.Type == typeof(ClassSection))
        {
            schema.Properties["class"].ReadOnly = true;
        }
    }
}

Program.cs
AddSwaggerGen

builder.Services.AddSwaggerGen(options =>
        {
            options.EnableAnnotations();
            options.SchemaFilter<SwaggerFilter>();
        });

昂首阔步的身体

POST
打电话

Swagger body for POST calls

entity-framework-core swagger
1个回答
0
投票

我建议为实体和 API 使用单独的模型:对于通过 API 端点接受的模型,定义 DTO 很好,所以我会定义类

ClassSectionDto
并将其映射到
ClassSection

但是如果你必须使用单个类,你可以简单地将

JsonIgnore
属性放在
Class
属性上:

[JsonIgnore]
public Class Class { get; set; }
© www.soinside.com 2019 - 2024. All rights reserved.