C# HttpWebRequest.Write 不发送内容

标签 c# .net httpwebrequest

尝试发送带有一些正文内容的网络请求。重要的部分是我需要在发布请求的正文中提供一些数据。我对如何做到这一点的理解是打开一个 WebRequestStream,然后将字节写入其中,然后关闭它。这应该很简单。这是我的代码:

        HttpWebRequest request;
        request = (HttpWebRequest)WebRequest.Create("http://localhost:50203/api/Values");//

        request.Method = "POST";
            byte[] requestBody = ASCIIEncoding.ASCII.GetBytes(HttpUtility.UrlEncode("grant_type=client_credentials"));
            Stream requestBodyStream = request.GetRequestStream();
            requestBodyStream.Write(requestBody, 0, requestBody.Length);
            requestBodyStream.Flush();
            requestBodyStream.Close();
            WebResponse response = (HttpWebResponse)request.GetResponse();
            Stream dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            myString = reader.ReadToEnd();

但是 RequestBodyStream.Write 方法没有在正文中发送任何内容。我知道这一点是因为我在另一端运行服务器端程序。

我还尝试使用 StreamWriter 而不是使用字节流来执行此操作,我得到了相同的结果。不管我怎么做,体内都没有内容。

我的理解是关闭流是发送实际数据的原因。我还尝试向流中添加 Flush() 方法。

为什么这个方法没有产生任何物体?

最佳答案

将“ContentType”和“ContentLength” header 添加到请求实例:

request.ContentType = "application/json"; // Or whatever you want
request.ContentLength = requestBody.Length;

关于C# HttpWebRequest.Write 不发送内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37601179/

相关文章:

c# - 如何从另一个集合中生成游戏实体集合而不产生垃圾?

c# - 使用 jquery 打开 RDP 连接窗口 - 客户端

c# - 如何提高调用 Web 服务的 Excel UDF 的性能?

.net - 从 getter/setter 的 MethodInfo 中查找托管 PropertyInfo

java - SQL Server Java 兼容 GUID/UUID(Big Endian 唯一标识符)

c# - HTTPWebRequest.GetResponse() 因通过透明代理的经过身份验证的请求而失败

c# - 如何在 mootools 中传递对象本身(就像我们在 C# 中所做的那样)?

c# - 在 LINQ 代码中合并重复数据而不影响其他数据

c# - HttpWebResponse GetResponseStream 卡在 Dispose 中

c# - Https GET 请求在 Postman 和浏览器中通过但在代码中失败