Swagger UI Post 并将问题放入关系数据库

Swagger UI Post and Put problem in relational database

我是 .NET Core 的新手。我正在尝试开发示例 API 项目,但我在最后 project.Firstly 时意识到一个问题,我想展示我的实体;

public class Student
{
    public int ID { get; set; }
    public string LastName { get; set; }
    public string FirstMidName { get; set; }
    public DateTime EnrollmentDate { get; set; }
    public ICollection<Enrollment> Enrollments { get; set; }
}


public class Enrollment
{
    public int EnrollmentID { get; set; }
    public int CourseID { get; set; }
    public int StudentID { get; set; }
    public Student Student { get; set; }
}

如您所见,我使用了两个 table,并且 2 个 table 之间存在关系。 HttpGet 和 HttpDelete 方法都可以。问题是; 当我尝试 post 一条新记录时,swagger 要我发送这些数据:

image1

无论我做什么,我都会犯这个错误: Swagger Fault image

为什么我会遇到这个错误,为什么 swagger 要我发送关系 table 数据?

感谢回答

这是 .Net6 中的新功能。您也可以在

中更改您的代码,如下所示
public ICollection<Enrollment>? Enrollments { get; set; }

Create the application and enable nullable reference types


您需要安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包。

如果您的项目是 .Net 5。您可以像下面那样在 Startup.cs 文件中添加 AddNewtonsoftJson

public void ConfigureServices(IServiceCollection services)
{
   ...    
   services.AddControllersWithViews().AddNewtonsoftJson();
}

如果您的项目是 .Net 6。您可以像下面那样在 Program.cs 文件中添加 AddNewtonsoftJson

...
builder.Services.AddControllersWithViews().AddNewtonsoftJson();
...

我找到了答案。当我尝试直接使用实体层来匹配 SQL 中的表时,我得到了这个错误。问题是; API 不需要用于数据库图表的 ICollection 属性,我的意思是,直接使用实体层是不够的。我意识到必须使用 Dto 对象。我想显示需要的模型:

 public class Student
{
    public int ID { get; set; }
    public string LastName { get; set; }
    public string FirstMidName { get; set; }
    public DateTime EnrollmentDate { get; set; }
    public ICollection<Enrollment> Enrollments { get; set; }
}

 public class Enrollment
    {
        public int EnrollmentID { get; set; }
        public int CourseID { get; set; }
        public int StudentID { get; set; }
        public Student Student { get; set; }
    }


    public class StudentDto
{
    public int ID { get; set; }
    public string LastName { get; set; }
    public string FirstMidName { get; set; }
    public DateTime EnrollmentDate { get; set; }
}

public class EnrollmentDto
{
    public int EnrollmentID { get; set; }
    public int CourseID { get; set; }
    public int StudentID { get; set; }
}

因此,我使用 Dto 对象将 API 与数据库

匹配