ASP.NET Core 2.1 CreatedAtRoute не возвращает ответа - PullRequest
0 голосов
/ 02 октября 2018

Я искал вокруг, но я не мог найти рабочий ответ на мою проблему.Я видел похожий вопрос, но у нас были разные результаты.Моя проблема в том, что у меня есть 2 контроллера.Первый контроллер имеет действие POST, которое я хочу вернуть CreatedAtRoute действию GET внутри другого контроллера.Я протестировал действие GET в Postman, и оно работает, поэтому моя единственная проблема - заставить 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 голосов
/ 02 октября 2018

Я нашел причину.Последний параметр для CreatedAtRoute и CreatedAtAction требовал объекта, похожего на контроллер назначения.Это пошло мне на ум, потому что я отправлял модели до того, что делал сейчас и использовал ViewModel.

Ну Это была не главная причина, по которой я не смог получить ответ.Это произошло из-за того, что объект, который я передаю, имел рекурсивные ссылки, потому что я отправлял модель, которая не была должным образом отформатирована для отправки в формате JSON.

Я использовал это, чтобы заставить его работать, взято с сайта MS Docs: CreatedAtAction(String, String, Object, Object) Где последним параметром должен быть объект, который вы хотите передать через API.

PS: Я тоже сразу не заметил, потому что, когда я отлаживал проект,это не разбилось и пришлось читать журналы.Я нуб, поэтому я действительно не знал, что исключение может произойти без сбоя проекта в режиме отладки.

...