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 与数据库
匹配
我是 .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 与数据库
匹配