我正在使用 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
打电话
我建议为实体和 API 使用单独的模型:对于通过 API 端点接受的模型,定义 DTO 很好,所以我会定义类
ClassSectionDto
并将其映射到 ClassSection
。
但是如果你必须使用单个类,你可以简单地将
JsonIgnore
属性放在 Class
属性上:
[JsonIgnore]
public Class Class { get; set; }