C# 如何禁用";期望:100继续“;HttpWebRequest中单个请求的标头?
C# 如何禁用";期望:100继续“;HttpWebRequest中单个请求的标头?,c#,.net,httpwebrequest,C#,.net,Httpwebrequest,HttpWebRequest自动为POST请求追加Expect:100 continue标题。互联网上的各种来源表明,可以按如下方式禁用此功能: System.Net.ServicePointManager.Expect100Continue = false; 但是,我正在编写一个库,如果应用程序依赖于此行为,我无法对整个appdomain禁用此功能。我也不能假设它将保持设置为该值。如何为特定请求禁用它?HttpWebRequest类有一个名为ServicePoint的属性,可用于为特定请求更
HttpWebRequest
自动为POST请求追加Expect:100 continue
标题。互联网上的各种来源表明,可以按如下方式禁用此功能:
System.Net.ServicePointManager.Expect100Continue = false;
但是,我正在编写一个库,如果应用程序依赖于此行为,我无法对整个appdomain禁用此功能。我也不能假设它将保持设置为该值。如何为特定请求禁用它?HttpWebRequest类有一个名为
ServicePoint
的属性,可用于为特定请求更改此设置。例如:
var req = (HttpWebRequest) WebRequest.Create(...);
req.ServicePoint.Expect100Continue = false;
如果还需要设置代理,请确保先设置代理。否则,Expect100Continue将再次恢复为true。因此:
HttpWebRequest webRequest = WebRequest.CreateHttp(_url);
webRequest.Proxy = new WebProxy(_proxyHost, _proxyPort);
webRequest.ServicePoint.Expect100Continue = false;
这终于对我起作用了。回答得很好。这使我不必为了设置HttpWebRequest.ContinueTimeout属性而将客户端升级到.NET 4.5。在运行时,它会自动添加一个插入设置代理来重新解析请求的服务点(通过调用私有FindServicePoint方法,这将导致ServicePointManager.FindServicePoint方法调用),有效地重置Expect100Continue属性。例如,在撰写本文时,RestSharp客户端将proxy和Expect100Continue设置为不正确的顺序(请参阅Http类的方法ConfigureWebRequest),这会导致417个Http错误。此技巧对使用代理的用户非常有用,我遇到这个问题时没有任何解释。我试过了,效果很好。