C#-HttpWebRequest-POST

标签 c# .net xml http httprequest

我正在尝试向 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/

相关文章:

c# - 当我通过我的存储库更新时,我的一个实体没有保存在 Entity Framework 中

c# - Sitecore 在 SavedItemRemoteEvent 上出错还有其他人吗?

c# - 如何在 ATL COM 模块中打印控制台输出?

c# - 根据参数,以编程方式启动 CLI 应用程序不起作用

c# - Newtonsoft.json 中的 ReferenceLoopHandling.Ignore 究竟做了什么?

xml - 检索子 XML 元素以显示饼图

c# - SandCaSTLe 中的实体文件报告

c# - 为什么某些属性和方法在 Powershell 中可用,但在 C# 中不可用

c# - 如何使用 { get; 访问私有(private)变量放; }

java - 在java中解析大量的xml文件