ASP.NET Core 2.1 CreatedAtRoute不返回任何响应

时间:2018-10-02 16:01:39

标签: asp.net asp.net-web-api asp.net-core-2.1

我正在四处搜寻,但找不到适合我问题的答案。我看到了类似的问题,但结果却不同。我的问题是我有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方法是我能想到的,这对我来说没有用。 This is what Postman shows me when I try to post.

编辑

控制器路由属性:

[ApiController]
    [Route("api/view/assessmentresult/")]
    public class AssessmentResultsController: ControllerBase
    {

[ApiController]
    [Route("api/take/assessment")]
    public class StudentAssessmentController : ControllerBase
    {

1 个答案:

答案 0 :(得分:0)

我找到了原因。 CreatedAtRouteCreatedAtAction的最后一个参数需要一个类似于目标控制器的对象。之所以如此,是因为我要先发送模型,然后再使用ViewModel进行发送。

那不是我无法得到回复的主要原因。因为执行,我传递的对象最终具有递归引用,因为我发送的模型格式不正确,无法以JSON格式发送。

我用它来使它工作,取自MS Docs网站: CreatedAtAction(String, String, Object, Object)最后一个参数应该是您要向api发送的对象。

PS:我也没有立即注意到,因为当我调试项目时,它没有崩溃并且必须读取日志。我是一个菜鸟,所以我真的不知道在调试模式下项目崩溃不会发生异常。