避免 HttpWebRequest GET 和 ProtocolViolationException
Posted
技术标签:
【中文标题】避免 HttpWebRequest GET 和 ProtocolViolationException【英文标题】:Avoid HttpWebRequest GET and ProtocolViolationException 【发布时间】:2015-12-17 18:40:42 【问题描述】:有没有办法防止HttpWebRequest.GetRequestStream
在方法为GET
时抛出异常?我知道HEAD
和GET
不应该在有效的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方法