Ожидайте продолжения несоответствий в разных средах - PullRequest
1 голос
/ 22 апреля 2020

У меня проблемы с заголовком Expect 100-Continue в методе DELETE внутри приложения. NET 4.5. Клиент также предоставляет небольшое тело содержимого внутри вызова.

  1. Официальная документация Microsoft , по-видимому, подразумевает, что этот заголовок передается по умолчанию только в PUT и POST звонки с непустым контентом, но это ничего не говорит о DELETE. Кто-нибудь знает, относится ли эта конфигурация также к DELETE?

  2. Я испытываю различное поведение в разных средах моего веб-приложения, в частности, у меня есть некоторые среды, в которых заголовок никогда не передается ( даже в PUT и POST) без какой-либо подсказки о его деактивации.

Для взаимодействия с этой опцией я знаю только четыре способа:

  • Через ServicePointManager через

     System.Net.ServicePointManager.Expect100Continue = false;
    
  • Редактирование параметров клиента

        var c = new HttpClient();
        c.DefaultRequestHeaders.ExpectContinue = false;
    
  • Добавление или удаление вручную на HttpWebRequest с AddHeader/Remove

  • Использование следующего свойства в Web.Config
    <system.net>
       <settings> 
           <servicePointManager expect100Continue="false"/>  
       </settings> 
    </system.net>

К сожалению, ни один из них не подходит для моего случая. Есть ли другие способы связываться с этой опцией?

1 Ответ

1 голос
/ 23 апреля 2020

Только что удалось найти решение этой проблемы. Я обнаружил, что некоторые из моих сред используют клиент couchbase для обработки распределенного кэша, в отличие от внутренней базы данных IIS, устанавливающей Expect100Continue в true, но это происходит следующим образом.

namespace Couchbase.Configuration.Client
{
  public class ClientConfiguration {

    //...

      public ClientConfiguration()
      { 
        //...
        this.Expect100Continue = false;
      }
    //--
    public bool Expect100Continue
    {
      get
      {
        return ServicePointManager.Expect100Continue;
      }
      set
      {
        ServicePointManager.Expect100Continue = value;
      }
    }

  }

}

, которые они используют, изменяют это свойство, используя метод stati c ServicePointManager, и это означает, что каждый следующий экземплярный клиент изменит свое поведение.

Моя версия Couchbase Client - 2.1.4.0

...