我有以下代码,当方法为“POST”时可以正常工作,但更改为“GET”时无法工作:
HttpWebRequest request = null;
request = HttpWebRequest.Create(uri) as HttpWebRequest;
request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
request.Method = "POST"; // Doesn't work with "GET"
request.BeginGetRequestStream(this.RequestCallback, null);
我使用“GET”方法时出现了“ProtocolViolationException”异常。
编辑:经过使用Reflector查看,似乎有一个明确的检查,“GET”方法如果设置为那样就会抛出异常。
编辑2:我已经更新了我的代码如下,但是当我调用EndGetResponse()时仍然会抛出异常。
if (request.Method == "GET")
{
request.BeginGetResponse(this.ResponseCallback, state);
}
else
{
request.BeginGetRequestStream(this.RequestCallback, state);
}
在我的函数ResponseCallback中,我有以下代码:
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);
这段代码现在已经可以运行,我忘记删除Content-Type行导致最后抛出了异常。感谢tweakt的贡献和Jon的回答。
修复后的代码如下:
HttpWebRequest request = null;
request = HttpWebRequest.Create(uri) as HttpWebRequest;
request.Method = "GET";// Supports POST too
if (request.Method == "GET")
{
request.BeginGetResponse(this.ResponseCallback, state);
}
else
{
request.BeginGetRequestStream(this.RequestCallback, state);
}
BeginGetResponse
用于发出网络请求,而BeginGetRequestStream
用于将数据写入流中。 - BlueRaja - Danny Pflughoeft