Пользовательский InputFormatter для исключения PostAsync в ASP NET Core - PullRequest
0 голосов
/ 25 апреля 2018

У меня странная проблема, которую я не знаю, почему она дает проблемы:

На клиенте у меня есть этот код:

 HttpResponseMessage response = await _httpClient.PostAsync("http://127.0.0.1:5544/api/Blablabla", new StringContent("test"));

На сервере я реализовал пользовательский InputFormatter, который имеет

 public async override Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context)
    {
        var request = context.HttpContext.Request;

        try
        {
            using (var reader = new StreamReader(request.Body))
            {
                var content = await reader.ReadToEndAsync().ConfigureAwait(false);
                return await InputFormatterResult.SuccessAsync(content).ConfigureAwait(false);
            }
        }
        catch (Exception e)
        {
            return await InputFormatterResult.FailureAsync();
        }            
    }

Если я попробую это, сработает исключение catch сервера, что даст мне исключение:

Существующее соединение было принудительно закрыто удаленным хостом

Но .....

Если в клиенте я выполняю синхронизацию PostAsync следующим образом:

HttpResponseMessage response = _httpClient.PostAsync("http://127.0.0.1:5544/api/Blablabla", new StringContent("test")).Result;

Все работает нормально.

В чем проблема ???

1 Ответ

0 голосов
/ 26 апреля 2018

Хорошо, я исправил это ...

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

Ничего не было связано с ядром asp net, только проблема асинхронного кода из кода синхронизации.

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