我正在尝试向 Apache Web 服务器发送 Http POST。
我发现设置 ContentLength 似乎是请求工作所必需的。
我宁愿直接从 GetRequestStream() 创建一个 XmlWriter 并将 SendChunked 设置为 true,但这样做时请求会无限期挂起。
这是我的请求是如何创建的:
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() 返回的 Stream 对象之前,我假设 XmlWriter 在释放时关闭了流,但事实并非如此。
下面的答案之一,让我来说说这个。我会将它们标记为答案。
就 HttpWebRequest 而言,我的原始代码工作正常。
最佳答案
这应该按照您编写的方式工作。我们可以看到实际上传的代码吗?你记得关闭流吗?
关于C#-HttpWebRequest-POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1902367/