C# - HttpWebRequest的 - POST
-
19-09-2019 - |
题
我试图让一个HTTP POST到Apache Web服务器。
我发现该设置的ContentLength似乎是需要为请求的工作。
直接从GetRequestStream()和SendChunked为真集,但请求挂起当这样做时,我宁愿创建的XmlWriter无限期。
下面是我的请求是如何创建的:
private HttpWebRequest MakeRequest(string url, string method)
{
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
request.Method = method;
request.Timeout = Timeout; //Property in my class, assume it's 10000
request.ContentType = "text/xml"; //I am only writing xml with XmlWriter
if (method != WebRequestMethods.Http.Get)
{
request.SendChunked = true;
}
return request;
}
我怎样才能让SendChunked工作,所以我没有设置的ContentLength?我没有看到一个理由把它发送到服务器之前的某个地方存储的XmlWriter的字符串。
编辑:这里是我的代码引起问题:
using (Stream stream = webRequest.GetRequestStream())
{
using (XmlWriter writer = XmlWriter.Create(stream, XmlTags.Settings))
{
Generator.WriteXml<TRequest>(request, writer);
}
}
在我没有一个使用来自GetRequestStream()返回的流对象上有,我假定设置时的XmlWriter关闭该流,但是这并非如此。
下面一个问题的答案,让我这个。我将它们标记为答案。
至于HttpWebRequest的来讲,我的原代码的工作就好了。
解决方案
这应该工作,你必须写它的方式。我们可以看到,实际上做上传的代码?你是否记得要关闭该流?
其他提示
综观例如在 HTTP:// msdn.microsoft.com/en-us/library/system.net.httpwebrequest.sendchunked.aspx 他们仍然设置内容长度。真正的底线是,如果你要发送的数据,你需要告诉你接收多少数据被发送。为什么你不知道你发送请求前,你有多少数据发送?
的ContentLength:
<强> 属性值 强> 类型:System .. :: Int64的 数据的字节数,以发送到互联网资源。默认值为-1,这表明属性尚未设置和没有请求的数据要发送。
编辑亚伦(I错):
HttpWebRequest httpWebRequest = HttpWebRequest.Create("http://test") as HttpWebRequest;
httpWebRequest.SendChunked = true;
MessageBox.Show("|" + httpWebRequest.TransferEncoding + "|");
从System.Net.HttpWebRequest.SerializeHeaders():
if (this.HttpWriteMode == HttpWriteMode.Chunked)
{
this._HttpRequestHeaders.AddInternal("Transfer-Encoding", "chunked");
}
else if (this.ContentLength >= 0L)
{
this._HttpRequestHeaders.ChangeInternal("Content-Length", this._ContentLength.ToString(NumberFormatInfo.InvariantInfo));
}
不隶属于 StackOverflow