«Нарушение протокола» при использовании указанного c кода языка в URI - PullRequest
1 голос
/ 03 февраля 2020

У нас есть REST API, который отображает сторонние проприетарные языковые коды (в формате en-US) в языковые коды, которые распознает наша собственная система. Маршрут REST API:

~/v1/languages/mappings/{foreignLanguageCode} [GET]

Мы получаем эти сторонние языковые коды и отправляем их в наш собственный API, используя экземпляр System.Net.Http.HttpClient.

. Это прекрасно работает для многих языковые коды, но при передаче ko-US запрос даже не отправляется - объект HttpClient выдает исключение

Произошла ошибка при отправке запроса.

Внутреннее исключение - WebException - говорит

Сервер совершил нарушение протокола. Section = ResponseStatusLine

Исключение также содержит

Источник: "Система"
Статус: ServerProtocolViolation
StackTrace:
в системе. Net .HttpWebRequest.EndGetResponse (IAsyncResult asyncResult)
в системе. Net .Http.HttpClientHandler.GetResponseCallback (IAsyncResult ar)

1031

1034 *1034* 1034 *1034* 1034 *1034* 1034 *1034* 1034 *1034* 1034 *1034* 1034 *1034* которых в этом месте 1034 * Я пробовал это с и без этого трейлера: sh: без разницы. Мы можем отправлять многие другие языковые коды в тот же API без каких-либо проблем.

Может кто-нибудь объяснить, почему именно этот URI вызывает это исключение?

1 Ответ

0 голосов
/ 04 февраля 2020

Отвечая на мой собственный вопрос ...

Я не могу объяснить, почему, но это решило проблему:

myHttpClient.DefaultRequestHeaders.ConnectionClose = true;

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

httpClient.DefaultRequestHeaders.ConnectionClose = true;
var response = await httpClient.GetAsync(uri).ConfigureAwait(false);
...