避免 HttpWebRequest GET 和 ProtocolViolationException

Posted

技术标签:

【中文标题】避免 HttpWebRequest GET 和 ProtocolViolationException【英文标题】:Avoid HttpWebRequest GET and ProtocolViolationException 【发布时间】:2015-12-17 18:40:42 【问题描述】:

有没有办法防止HttpWebRequest.GetRequestStream在方法为GET时抛出异常?我知道HEADGET 不应该在有效的HTTP 中包含正文,但是有些服务器无论如何都接受这些方法的正文(例如,Elasticsearch 的_search 功能)。我有一个用于进行 REST 调用的开源项目,我想知道是否可以规避这种行为以避免意外。

在某个时候,我可能会使用新的System.Net.Http.HttpClient 类创建我的库的一个版本。这个类有同样的限制吗?

【问题讨论】:

【参考方案1】:

.Net Core 2.0:

如果您使用SendAsync 方法,System.Net.Http.HttpClient(版本=4.2.0.0)没有此限制。

var request = new HttpRequestMessage(HttpMethod.Get, "http://example.com/api/_search");
request.Content = new StringContent(jsonSearchCriteria, Encoding.UTF8, "application/json");
var response = await httpClient.SendAsync(request,
    HttpCompletionOption.ResponseContentRead);
var jsonResponse = await response.Content.ReadAsStringAsync();

【讨论】:

以上是关于避免 HttpWebRequest GET 和 ProtocolViolationException的主要内容,如果未能解决你的问题,请参考以下文章

C#通过WebClient/HttpWebRequest实现http的post/get方法

网络请求HttpWebRequest的Get和Post

HttpWebRequest和HttpWebResponse的应用

HttpWebRequest. 频繁采集如何避免 操作超时

C#中HttpWebRequest的用法详解

HttpClient替换HttpWebRequest--以GET和POST请求为例说明