【问题标题】:Silverlight 4.0 - HttpWebRequest throwing ProtocolViolationExceptionSilverlight 4.0 - HttpWebRequest 抛出 ProtocolViolationException
【发布时间】:2010-06-01 20:52:18
【问题描述】:

我收到“System.Net.ProtocolViolationException:由于对象的当前状态,操作无效。”尝试调用时出错

 var request = (HttpWebRequest)WebRequest.Create(uri);

 request.Method = "GET";

 request.ContentType = "text/xml";

 request.BeginGetRequestStream(RequestCompleted, request);

【问题讨论】:

  • 在使用 Google Chrome 的开发者工具检查网络流量时,我发现托管在网络服务器根目录上的 clientaccesspolicy.xml 没有被检索。

标签: silverlight httpwebrequest silverlight-4.0 get


【解决方案1】:

我怀疑这可能是因为您正在对已指定“GET”方法的请求对象执行BeginGetRequestStream

当执行“GET”时,服务器不会期望请求中有实体主体,因此您应该直接转到BeginGetResponse。此外,不需要在请求上指定 ContentType,它指定在请求的实体正文中发送的内容类型,但如前所述,“GET”不会发送任何内容,它只会获取内容。

【讨论】:

  • 那么我该如何处理 PUT 或 DELETE 呢?
  • @cmaduro: 好吧 PUT(DELETE 也没有实体主体)是您可以使用 BeginGetRequestStream 的地方,但是您需要使用 ClientHTTP 堆栈,因为 BrowserHTTP 堆栈仅支持 GET 和发布
【解决方案2】:

我不同意 AnthonyWJones 的回答。我在 HTTP 规范中找不到任何禁止“GET”请求包含消息正文的内容。我认为不幸的是,这已成为对 HTTP 工作原理的事实上的理解,因为通常不需要(或方式)包含消息正文。话虽如此,他对这个特定异常的原因是正确的。但是,我认为应该更改 BCL 以允许它。

如果有人能指出,我很想知道规范在哪里排除了这一点: HTTP RFC 2616

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多