【问题标题】:Does System.Net.Http.HttpClient support sending a GET request with an entity body?System.Net.Http.HttpClient 是否支持发送带有实体主体的 GET 请求?
【发布时间】:2013-08-06 19:02:07
【问题描述】:

我正在开发一个使用 Web 服务的 Windows Phone 8 应用程序。这个特定的网络服务需要一个带有实体主体的 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?如果没有,是否有任何变通办法?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    我知道你问这个问题已经有一段时间了,但不管怎样。

    虽然在 GET 请求的正文中发送有效负载可能不会违反 RFC 的客户端,但它确实违反了惯例。 RFC 的 do 说的是,处理此类请求的服务器没有义务查看请求 URI 和 Host: 标头以外的任何内容,以确定其响应应该是什么。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-20
      • 2021-06-20
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多