预计在不同的环境下会继续出现不一致的情况。

问题描述 投票:1回答:1

我的头部有一些问题 Expect 100-Continue 在.NET 4.5应用程序里面的一个DELETE方法上。客户端在调用中还提供了一个小的内容体。

  1. 在调用中,客户端还提供了一个小的内容体。微软官方文档 似乎意味着这个头默认只在PUT和POST调用中传递非空的内容,但它没有提到DELETE。有谁知道这个配置是否也适用于DELETE?

  2. 我在我的web应用程序的不同环境中遇到了不同的行为,特别是我有一些环境,在这些环境中,头从未被传递(即使在PUT和POST中),没有任何关于它被停用的提示。

为了与这个选项交互,我只知道四种方法。

  • 通过ServicePointManager

     System.Net.ServicePointManager.Expect100Continue = false;
    
  • 编辑客户端选项

        var c = new HttpClient();
        c.DefaultRequestHeaders.ExpectContinue = false;
    
  • 手动添加或删除它在 HttpWebRequestAddHeader/Remove

  • 使用以下属性 Web.Config
    <system.net>
       <settings> 
           <servicePointManager expect100Continue="false"/>  
       </settings> 
    </system.net>

不幸的是,这些似乎都不是我的情况。有没有其他方法来搞这个选项?

c# asp.net-mvc-4 couchbase
1个回答
1
投票

刚刚设法找到了这个问题的解决方法。我发现我的一些环境使用的是 Couchbase客户端 来处理分布式缓存,不同于IIS的couchbase内部设置了 Expect100Continuetrue 但它是以如下方式实现的。

namespace Couchbase.Configuration.Client
{
  public class ClientConfiguration {

    //...

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

  }

}

他们使用静态的 ServicePointManager 方法,这意味着每一个后续实例化的客户端都会改变其行为。

我的Couchbase客户端版本是 2.1.4.0

© www.soinside.com 2019 - 2024. All rights reserved.