System.Net.Http.HttpClient是否支持向实体主体发送GET请求?

时间:2013-08-06 19:02:08

标签: c# get windows-phone-8 httpclient

我正在开发一个使用Web服务的Windows Phone 8应用程序。此特定Web服务需要具有实体主体的GET请求。

我正在使用System.Net.Http.HttpClient发送此请求,我已成功用于发送各种其他Web请求(GET,POST和PUT)。这是第一个包含有效负载的GET请求,因此包含Content-Type和Content-Length标头。

请求失败,出现如下异常:

'TaskHost.exe'(CLR C:\ windows \ system32 \ coreclr.dll:Silverlight AppDomain):已加载'C:\ windows \ system32 \ en-US \ mscorlib.debug.resources.dll'。模块没有符号。 System.Windows.ni.dll中出现“System.Net.ProtocolViolationException”类型的异常,并且在托管/本机边界之前未处理 mscorlib.ni.dll中发生了'System.Net.ProtocolViolationException'类型的第一次机会异常 mscorlib.ni.dll中出现“System.Net.ProtocolViolationException”类型的异常,并且在托管/本地边界之前未处理

根据我的研究,包括带有GET请求的有效负载有点不寻常,而RFC并未明确禁止。

我没有更改网络服务的选项。 System.Net.Http.HttpClient是否完全不允许使用实体主体进行GET?如果没有,是否有任何解决方法?

谢谢。

1 个答案:

答案 0 :(得分:1)

我知道你问这个问题已经有一段时间了,但无论如何都要进行。

虽然在GET请求的主体中发送有效负载可能不违反RFC的客户端,但它确实违反了常规做法。 RFC的所说的是,提供此类请求的服务器绝不必要查看除请求URI和Host:头之外的任何内容,以确定其响应应该是什么。 / p>

引用RFC2616中的HTTP 1.1规范,第5.2节说:“Internet请求标识的确切资源是通过检查Request-URI和Host头字段来确定的。”它说没有关于请求机构。

这意味着,即使您尝试执行的操作不违反任何RFC,您的WP8应用所使用的Web服务也是。如果您别无选择,只能使用它,那么看起来您将不得不推出自己的HTTP-ish客户端,我猜您现在可能已经完成了。 System.Net.Http.HttpClient中的现成解决方案不会展示在与兼容服务器通信时永远不会使用的行为。

相关问题