来自其他模型的 WebAPI Return Json
WebAPI Return Json from Other Models
我的搜索措辞可能有误,但我还没有从控制器中找到与 returning "more" json 相关的任何内容,而不仅仅是我的控制器/模型我正在工作。我读过的内容让我想相信我的数据库存在关系或映射问题,但同样,我不确定从哪里开始。
目前我的控制器只有 returning:
{
"Id": 43,
"CreatedDate": "2015-02-09T00:00:00",
"CreatedBy": "username",
"ClosedDate": "2015-02-09T00:00:00",
"ClosedBy": "username",
"Revision": "1"
}
我正在尝试 return 看起来像这样的东西:
{
"JobDetails": {
"Tasks": [{
"Id": 1,
"TaskName": "string",
"TaskDescription": "string",
"TaskOrder": 1,
"TimeCompleted": "DateTime",
"CompletedBy": "string",
"Notes": [{
"Note": "This is note 1.",
"CreatedDate": "DateTime",
"CreatedBy": "string"
}, {
"Note": "This is note 2.",
"CreatedDate": "DateTime",
"CreatedBy": "string"
}]
}]
}
}
内容来自我的 "JobsController",在 POST 之后,您可以看到填充了其他字段。
// POST: api/Jobs
[Route("api/Jobs/PostJob/", Name="PostJobRoute")]
[ResponseType(typeof(Job))]
public IHttpActionResult PostJob(Job job)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
//Run query to get a list of all tasks that have the group ID passed
IQueryable<Task> TasksQuery =
from c in db.Tasks
select c;
//Execute and loop results...
IQueryable<Task> TasksByGroupId = TasksQuery.Where(c => c.TaskGroupId == 1);
foreach (var task in TasksByGroupId)
{
db.JobDetails.Add(new JobDetail()
{
//Generate a new job detail for this job
JobId = job.Id,
TimeCompleted = DateTime.Now,
CompletedBy = "ocodyc",
TaskId = task.Id,
TaskIdOrder = task.TaskOrder
});
}
//TODO: Return a list of the task + notes
db.Jobs.Add(job);
db.SaveChanges();
return CreatedAtRoute("PostJobRoute", new { id = job.Id }, job);
}
这似乎是映射问题?我试过将导航 属性 添加到 "jobs" 到 "jobdetails" 但这没有用。
您是 return 传递给操作的对象,这就是原因。不要returnjob
,做这样的事情:
var jobDetailList = new List<JobDetail>();
foreach (var task in TasksByGroupId)
{
jobDetailList.Add(new JobDetail()
{
//Generate a new job detail for this job
JobId = job.Id,
TimeCompleted = DateTime.Now,
CompletedBy = "ocodyc",
TaskId = task.Id,
TaskIdOrder = task.TaskOrder
});
}
//TODO: Return a list of the task + notes
db.Jobs.AddRange(jobDetailList);
db.SaveChanges();
return CreatedAtRoute("PostJobRoute", new { id = job.Id }, jobDetailList.AsEnumerable());
aw04 是对的。您可能想要实施 DTO 模式并将您所在的领域投射到该模式中
我的搜索措辞可能有误,但我还没有从控制器中找到与 returning "more" json 相关的任何内容,而不仅仅是我的控制器/模型我正在工作。我读过的内容让我想相信我的数据库存在关系或映射问题,但同样,我不确定从哪里开始。
目前我的控制器只有 returning:
{
"Id": 43,
"CreatedDate": "2015-02-09T00:00:00",
"CreatedBy": "username",
"ClosedDate": "2015-02-09T00:00:00",
"ClosedBy": "username",
"Revision": "1"
}
我正在尝试 return 看起来像这样的东西:
{
"JobDetails": {
"Tasks": [{
"Id": 1,
"TaskName": "string",
"TaskDescription": "string",
"TaskOrder": 1,
"TimeCompleted": "DateTime",
"CompletedBy": "string",
"Notes": [{
"Note": "This is note 1.",
"CreatedDate": "DateTime",
"CreatedBy": "string"
}, {
"Note": "This is note 2.",
"CreatedDate": "DateTime",
"CreatedBy": "string"
}]
}]
}
}
内容来自我的 "JobsController",在 POST 之后,您可以看到填充了其他字段。
// POST: api/Jobs
[Route("api/Jobs/PostJob/", Name="PostJobRoute")]
[ResponseType(typeof(Job))]
public IHttpActionResult PostJob(Job job)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
//Run query to get a list of all tasks that have the group ID passed
IQueryable<Task> TasksQuery =
from c in db.Tasks
select c;
//Execute and loop results...
IQueryable<Task> TasksByGroupId = TasksQuery.Where(c => c.TaskGroupId == 1);
foreach (var task in TasksByGroupId)
{
db.JobDetails.Add(new JobDetail()
{
//Generate a new job detail for this job
JobId = job.Id,
TimeCompleted = DateTime.Now,
CompletedBy = "ocodyc",
TaskId = task.Id,
TaskIdOrder = task.TaskOrder
});
}
//TODO: Return a list of the task + notes
db.Jobs.Add(job);
db.SaveChanges();
return CreatedAtRoute("PostJobRoute", new { id = job.Id }, job);
}
这似乎是映射问题?我试过将导航 属性 添加到 "jobs" 到 "jobdetails" 但这没有用。
您是 return 传递给操作的对象,这就是原因。不要returnjob
,做这样的事情:
var jobDetailList = new List<JobDetail>();
foreach (var task in TasksByGroupId)
{
jobDetailList.Add(new JobDetail()
{
//Generate a new job detail for this job
JobId = job.Id,
TimeCompleted = DateTime.Now,
CompletedBy = "ocodyc",
TaskId = task.Id,
TaskIdOrder = task.TaskOrder
});
}
//TODO: Return a list of the task + notes
db.Jobs.AddRange(jobDetailList);
db.SaveChanges();
return CreatedAtRoute("PostJobRoute", new { id = job.Id }, jobDetailList.AsEnumerable());
aw04 是对的。您可能想要实施 DTO 模式并将您所在的领域投射到该模式中