我正在四处搜寻,但找不到适合我问题的答案。我看到了类似的问题,但结果却不同。我的问题是我有2个控制器。第一个控制器具有POST操作,我想将CreatedAtRoute
返回到另一个控制器内的GET操作。我在Postman中测试了GET操作,它可以正常工作,所以我唯一的问题是使CreatedAtRoute
正常工作。
我的第一个控制器:
[HttpPost]
public async Task<IActionResult> Submit(AssessmentAttemptVM attempt)
{
if (!ModelState.IsValid)
{
return BadRequest();
}
//Do database related stuff
await _context.SaveChangesAsync();
return CreatedAtRoute("GetAssessmentResult", new { id = studentAttempt.Id }, studentAttempt);
}
我的第二个控制器:
[HttpGet("{id}", Name = "GetAssessmentResult")]
public async Task<ActionResult<AssessmentResultVM>> GetById(int id)
{
//Get my ViewModel -- This works if I try to access it without using the CreatedAtRoute method
return resultVM;
}
下图显示了邮递员在尝试邮寄时的响应。我验证了数据已添加到数据库中,因此只有CreatedAtRoute
方法是我能想到的,这对我来说没有用。
编辑
控制器路由属性:
[ApiController]
[Route("api/view/assessmentresult/")]
public class AssessmentResultsController: ControllerBase
{
[ApiController]
[Route("api/take/assessment")]
public class StudentAssessmentController : ControllerBase
{
答案 0 :(得分:0)
我找到了原因。 CreatedAtRoute
和CreatedAtAction
的最后一个参数需要一个类似于目标控制器的对象。之所以如此,是因为我要先发送模型,然后再使用ViewModel进行发送。
好那不是我无法得到回复的主要原因。因为执行,我传递的对象最终具有递归引用,因为我发送的模型格式不正确,无法以JSON格式发送。
我用它来使它工作,取自MS Docs网站:
CreatedAtAction(String, String, Object, Object)
最后一个参数应该是您要向api发送的对象。
PS:我也没有立即注意到,因为当我调试项目时,它没有崩溃并且必须读取日志。我是一个菜鸟,所以我真的不知道在调试模式下项目崩溃不会发生异常。