Silverlight 4.0-HttpWebRequest引发ProtocolViolationException异常
我收到“System.Net.ProtocolViolationException:由于对象的当前状态,操作无效。”尝试调用时出错Silverlight 4.0-HttpWebRequest引发ProtocolViolationException异常,silverlight,httpwebrequest,silverlight-4.0,get,Silverlight,Httpwebrequest,Silverlight 4.0,Get,我收到“System.Net.ProtocolViolationException:由于对象的当前状态,操作无效。”尝试调用时出错 var request = (HttpWebRequest)WebRequest.Create(uri); request.Method = "GET"; request.ContentType = "text/xml"; request.BeginGetRequestStream(RequestCompleted, request); 我怀疑这可能
var request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.ContentType = "text/xml";
request.BeginGetRequestStream(RequestCompleted, request);
我怀疑这可能是因为您正在对已指定“GET”方法的请求对象执行
BeginGetRequestStream
执行“GET”时,服务器不希望请求中包含实体主体,因此您应该直接进入
开始响应
。另外,在请求上指定ContentType
也不是必需的,它指定了在请求的实体体中发送的内容类型,但如前所述,“GET”不发送任何内容,它只获取内容。我不同意AnthonyWJones的回答。我在HTTP规范中没有发现禁止“GET”请求包含消息体的内容。不幸的是,我认为这已经成为对HTTP工作原理的事实理解,因为通常不需要(或不需要)包含消息体。话虽如此,他对这一特殊例外的原因是正确的。然而,我认为BCL应该改变以允许它
如果有人能指出这一点,我很想知道规范在哪里排除了这一点:
在使用Google Chrome的开发者工具检查网络流量时,我发现Web服务器根目录上托管的clientaccesspolicy.xml没有被检索。那么我该如何处理PUT或DELETE?@cmaduro:Well PUT(DELETE也没有实体主体)是您将使用
BeginGetRequestStream
的地方,但是您需要使用ClientHTTP堆栈,因为BrowserHTTP堆栈仅支持GET和POST