Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何禁用";期望:100继续“;HttpWebRequest中单个请求的标头?_C#_.net_Httpwebrequest - Fatal编程技术网

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错误。此技巧对使用代理的用户非常有用,我遇到这个问题时没有任何解释。我试过了,效果很好。