我正在尝试对 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 而言,我的原始代码工作得很好。