如何解决C#中ConcreteClass中的项目不能同时与GET和POST调用一起使用
我是Web编程的新手,这是我的第一个使用与WEB相关的东西的项目,所以请保持谦虚。
我正在使用Entity Framework中的InMemoryDatabase,我想从中使用GET方法发送该消息,有关项目的一些数据,还希望通过POST方法接收一些数据。问题是我不能让他们两个都工作。
项目类如下:
public class Project
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public IList<WorkEntry> WorkEntries { get; } = new List<WorkEntry>();
public Project(string name,DateTime startDate,DateTime endDate)
{
Id = Stubs.getUniqueID();
Name = name;
StartDate = startDate;
EndDate = endDate;
}
}
我正在像这样进行get呼叫:
// GET api/projects
[HttpGet]
public IActionResult Get() //async
{
return Ok(_context.Projects);
}
我的问题是,当我在前端继续发送此信息时,即使我清楚地将其设置如下,也会得到一个用于WorkEntries的空数组:
var testProject1 = new Project("...",new System.DateTime(...),new System.DateTime(...));
Stubs.PopulateWorkEntries(testProject1);
context.Projects.Add(testProject1);
context.SaveChanges();
PopulateWorkEntries仅返回一个数组,该数组包含我仔细检查过的workEntries的值,并且确实存在该信息,但不能从get调用中获取该信息。
我为我的课程使用了多种配置,但有些与get一起使用,但不适用于POST,例如:
public class Project
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public List<WorkEntry> WorkEntries { get; set; }
public Project( string name,DateTime endDate)
{
Id = Stubs.getUniqueID();
Name = name;
StartDate = startDate;
EndDate = endDate;
WorkEntries = PopulateWorkEntries(StartDate,EndDate);
}
这使WorkEntires进入前端,但是一旦我为POST方法添加空的构造函数使之工作,它将停止发送带有getwell的WorkEntries。在两个示例中,WorkEnties均填充有有效数据。
所以问题是我无法同时使它们获得GET和POST。我只成功完成1项工作。我尝试调试,但是找不到运气
解决方法
您的类“ Project”上需要一个空的构造函数,请尝试将类更改为:
public class Project
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public IList<WorkEntry> WorkEntries { get; } = new List<WorkEntry>();
public Project(string name,DateTime startDate,DateTime endDate)
{
Id = Stubs.getUniqueID();
Name = name;
StartDate = startDate;
EndDate = endDate;
}
public Project(){}
}
这是因为EntityFramework需要一个没有参数的构造函数来从数据库调用时生成对象
因此,要调用子集合,可以使用Include函数调用:
// GET api/projects
[HttpGet]
public IActionResult Get() //async
{
return Ok(_context.Projects.Include(x => x.WorkEntries));
}
请阅读:https://docs.microsoft.com/en-us/ef/ef6/querying/related-data
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。