MVC - Асинхронная гонка HTTP-ответа на C# ASP.NET - PullRequest
0 голосов
/ 07 мая 2020

У меня есть этот метод GET, он извлекает ресурс Post, содержащий информацию о записи.

[HttpGet("{id}")]
        public async Task<PostResource> GetOneAsync(int id)
        {
            var post = await _postService.GetSingleAsync(id);

            var resource = _mapper.Map<Post, PostResource>(post);
            return resource;
        }

Это то, что вы получаете, когда запрашиваете GET '/ api / posts / id', он включает пользователя ресурс, который создал сообщение.

{
    "id": 103,
    "title": "¿Te sueles despetar por la noche?",
    "description": "",
    "pay": 1.77,
    "pubDate": "2020-02-27 03:05:10-05",
    "user": {
        "id": 100,
        "name": "Piter",
        "surname": "Cueva",
        "dni": "19482984",
        "birth": "18/8/1888",
        "email": "pitercueva@gmail.com",
        "password": "clavesegura"
    }
}

У меня есть этот метод PUT. После того, как я вставил новую публикацию, я хочу вернуть обновленный ресурс публикации с ответом о состоянии [200 OK]. Я использую тот же самый logi c в предыдущем запросе (получить по идентификатору).

[HttpPut("{id}")]
        public async Task<IActionResult> PutAsync(int id, SavePostResource resource)
        {
            var post = _mapper.Map<SavePostResource, Post>(resource);
            var result = await _postService.UpdateAsync(id, post);

            if (!result.Success)
            {
                return BadRequest(result.Message);
            }   

            var resultUpdated = await _postService.GetSingleAsync(id);
            var postUpdated = _mapper.Map<Post, PostResource>(resultUpdated );
            return Ok(postUpdated);
        }

Я ожидаю тот же JSON ответ, который я получил ранее. Однако я получаю это пустое поле для пользователя в ответе о состоянии [200 OK]:

{
    "id": 103,
    "title": "¿Te sueles despetar por la noche?",
    "description": "",
    "pay": 1.77,
    "pubDate": "2020-02-27 03:05:10-05",
    "user": null
}

Сообщение ДЕЙСТВИТЕЛЬНО сохраняется, потому что когда я позже вызываю GET '/ api / posts / id', новое сообщение появляется там с его User в порядке, без нулей, но я также хочу показать пользователю в ответе состояния [200 OK], когда я выполняю запрос PUT.

Я предполагаю, что это что-то для выполнения ключевого слова await и возврата старого ресурса до того, как новый ресурс достигнет базы данных. Как мне подойти к этой проблеме? Как я могу убедиться, что:

await _postService.UpdateAsyn c (id, post);

происходит до:

ожидание _postService.GetSingleAsyn c (идентификатор);

...