что будет лучшим http возвращаемым типом результата и может вернуть HttpResponseMessage в одной строке кода - PullRequest
0 голосов
/ 23 марта 2020

Я использую asp. net core web api, и мне нужно выполнить одну задачу OneTask, и при успешном выполнении OneTask она должна вернуть OK, если в противном случае возникнет ошибка. Я хочу HttpResponseMessage и могу что-то вернуть return Ok(awit OneTask());

[HttpPost]
    public async Task<OkObjectResult> Post()
    {
        await OneTask;
        return Ok(new HttpResponseMessage(HttpStatusCode.OK));
    }


public async Task OneTask()
    {
        await //some task
    }

1 Ответ

1 голос
/ 23 марта 2020

Интерфейс IActionResult<T> - лучшая практика для ответа клиенту.

Поэтому измените код следующим образом:

[HttpPost]
[Route("PostWithValue")]
public async Task<IActionResult> PostWithValue()
{
    var result = await OneTaskWithReturnValue();

    return Ok(result);
}
public async Task<bool> OneTaskWithReturnValue()
{
    await Task.Delay(100);

    return true;
}

Кроме того, остерегайтесь async void (Task without <T>), то есть плохая идея, потому что у вас есть проблемы с обработкой исключений:

В двух словах:

[HttpPost]
[Route("PostWithValue")]
public async Task<IActionResult> PostWithValue()
{
    var result = await OneTaskWithReturnValue();

    if (!result)
    {
        return BadRequest("Message for Error");
    }

    return Ok("Message for OK Status");
}
public async Task<bool> OneTaskWithReturnValue()
{
    await Task.Delay(100);

    // Do you task

    return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...