我很困惑让我相对简单的PUT请求能够正常工作。在我的控制器中,我有一个edit(Put)方法,该方法工作正常,但是,我使用了第二个PUT请求,作为拖放操作以对清单中的步骤重新排序,此方法正在收到CORS错误/ HTTP 500,当我尝试以角度或邮递员运行它时。我感到困惑的是一个例程的工作方式,但另一个例程却出错了
我尝试调试,并验证数据已正确传递给控制器操作,但未将其保存到数据库,在命中我的foreach语句后保存然后炸毁了
这是编辑代码,有效
[HttpPut("{stepId}")]
public async Task<ActionResult> EditStep(int stepId, LogChecklistSteps step)
{
step.Idstep = stepId;
_repo.EditStep(step);
var history = FileHistory(step, "Draft", "Edited a Step");
_repo.Add(history);
await _repo.SaveAll();
return NoContent();
}
这是我遇到问题的代码
[HttpPut("reorder")]
public async Task<ActionResult> ReorderSteps(LogChecklist checklist)
{
foreach(var s in checklist.LogChecklistSteps)
{
_repo.ReorderSteps(s);
}
await _repo.SaveAll();
return NoContent();
}
和我的仓库中的代码
public void EditStep(LogChecklistSteps step )
{
_ctx.Entry(step).State = EntityState.Modified;
}
public void ReorderSteps(LogChecklistSteps step)
{
_ctx.LogChecklistSteps.Update(step);
}
public async Task<bool> SaveAll()
{
return await _ctx.SaveChangesAsync() > 0;
}
答案 0 :(得分:0)
原来我的问题是脚手架dbcontext将我的“步骤”字段列为复合键。该项目是针对一个旧数据库的,该数据库的设计者使用了组合键而不是唯一的ID,我在测试系统中对其进行了修复,一旦从模型构建器中删除了该字段,我的代码便开始工作。
谢谢大家关注我的问题。