Выполнение не возвращается после успешного вызова API - PullRequest
0 голосов
/ 14 января 2019

При вызове конечной точки API HttpDelete Web API из контроллера MVC выполнение не возвращается обратно в контроллер

using (var client = new HttpClient())
{

    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

    var response = await client.DeleteAsync(new Uri($"{AppSettingsHelper.GetValue("ApiHost")}/api/delete/user/{userId}"));
    if (response.IsSuccessStatusCode)
    {
        return true;
    }

    return false;
}

Результат и выполнение должны быть возвращены обратно в контроллер MVC

1 Ответ

0 голосов
/ 14 января 2019

Где-то в цепочке вызовов вы, вероятно, вызываете .Wait() или .Result для задачи. Это вызывает взаимоблокировку, потому что ваш планировщик не будет выпускать этот асинхронный контекст до тех пор, пока эта задача не будет завершена, но задача не может быть завершена без доступа к асинхронному контексту для обработки продолжения вашей задачи.

Лучшая рекомендация, как правило, заключается в том, чтобы идти «асинхронно до конца», используя async/await паттерны на всем пути от действия вашего контроллера до этого метода.

Если это невозможно, следующая лучшая вещь - убедиться, что вы звоните .ConfigureAwait(false) каждый раз, когда видите ключевое слово await. Но будьте осторожны, потому что, если вы сделаете это, а затем попытаетесь получить доступ к чему-то вроде HttpContext.Current после одного из этих событий, он потерпит неудачу.

...