Как остановить IIS Express 10.0, возвращающий 411 LengthRequired - PullRequest
0 голосов
/ 05 мая 2020

У меня есть клиентское приложение. NET 4.6.1, которое использует HttpWebRequest для вызова WebAPI, размещенного на IIS. Один из вызовов - это запрос POST без тела, который не устанавливает заголовок ContentLength (HttpWebRequest.ContentLength имеет значение по умолчанию -1, что указывает на то, что свойство не было установлено и нет данных запроса для отправки).

  • Когда я отправляю этот запрос в приложение WebAPI, размещенное на IIS 8.5, запрос POST работает нормально.
  • До недавнего времени я также мог отправить запрос в WebAPI, работающий на IIS Express в отладчике Visual Studio 2017, и опять же, он работал нормально. К сожалению, я больше не знаю, какая именно версия IIS Express использовалась.

Недавно я восстановил на своей машине разработки Windows 10 версии 1909 и переустановил последнюю версию Visual Studio 2017 15.9.22. После этого:

  • Запросы, отправленные с машины разработчика на WebAPI, удаленно размещенный на IIS 8.5, продолжают работать нормально.
  • Запросы, отправленные на WebAPI, работающий локально на IIS Express 10.0.14358.1000 в отладчике Visual Studio 2017 отклоняются с помощью 411 LengthRequired.

Я знаю, что могу (и в конечном итоге буду) исправить это, изменив свой клиентский код, установив ContentLength = 0 .

Но клиентский код отсутствует в поле, и я хотел бы исправить это на стороне сервера, если возможно, например, настроив IIS Express соответствующим образом.

Это выглядит для меня это как критическое изменение в поведении IIS между IIS 8.5 и IIS Express 10.0.14358.1000, поскольку последний IIS Express кажется более ограничительным в отказе принять POST без заголовка ContentLength.

Есть ли способ настроить IIS Express, чтобы он вел себя как раньше? Или другой способ исправить это без изменения клиентского кода?

1 Ответ

1 голос
/ 06 мая 2020

Если вы просмотрите запрос, вы увидите, что ответ возвращается не из IIS, а из http.sys HTTP-API / 2.0.

enter image description here

Поскольку нет реестра, который может это исправить, я боюсь, что единственный способ исправить 411 - это изменить код клиента. В противном случае IIS express не сможет даже принять запрос.

https://support.microsoft.com/en-us/help/820129/http-sys-registry-settings-for-windows

...