我在API中遇到了一个问题,因为我在post/put方法中的一个类中有一个外键,它要求我提供这两个类的信息。对于get方法来说,这是有意义的,因为我想在前端打印信息,顺便说一下,我在前端使用blazor。我也使用SQLite作为数据库。
以下是类-Certification
:
public partial class Certification
{
public long Id { get; set; }
public string Name { get; set; } = null!;
public virtual ICollection<Exam> Exams { get; set; } = new List<Exam>();
}
public partial class Exam
{
public int Id { get; set; }
public long? CertificationId { get; set; }
public string Name { get; set; } = null!;
public long MinimumGrade { get; set; }
public virtual Certification? Certification { get; set; }
public virtual ICollection<ExamAttempt> ExamAttempts { get; set; } = new List<ExamAttempt>();
}
我正在使用Swagger来看看后端发生了什么。
It asks for all this information when I'm trying to add an exam
When I only want to asks for this information
考虑到在前端我想为每个认证做一个粗糙的考试。
1条答案
按热度按时间mu0hgdu01#
您不应该将数据库模型与请求模型混合使用,这是一种不好的做法,而且存在安全风险。
您应该创建DTO,并使每个操作的数据最小化,因此,如果要将认证添加到检查中,则应该单独执行此操作以添加检查。
以下是DTO示例:
您可以像这样将DTOMap到数据库模型
或者,如果要将证书添加到检查:
如果你真的必须在一个操作中使用两个,你只需将Exam更改为如下所示:
问题是请求对象必须完全匹配,这就是为什么必须Map它们的原因。否则不要使用对象,可以使用
HttpContext.Current.Request
属性。仅供参考,您将需要在我提供的示例中进行额外的检查,否则它将不健壮。在添加之前检查考试和认证ID是否确实存在。