使用 WebRequest(C#) 发送数据和文件



我想使用 WebRequest 发送数据和文件。

byte[] fileStream = File.ReadAllBytes(path);
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });
WebRequest request = WebRequest.Create(url);
request.ContentType = "application/json";
request.Method = "POST";
request.Credentials = new NetworkCredential("name", "pw");
Stream dataStream = request.GetRequestStream();
dataStream.Write(Encoding.UTF8.GetBytes(data), 0, Encoding.UTF8.GetBytes(data).Length);
//dataStream.Write(fileStream, 0, fileStream.Length);
dataStream.Write(fileStream, 0, fileStream.Length); //CAUSES A CRASH
dataStream.Close();
WebResponse response = request.GetResponse();

我不知道为什么它会失败,如果我包括"dataStream.Write(fileStream, 0, fileStream.Length);"行服务器无法接受我的流,说有一个内部错误。我有一个有效的 CURL 命令,向我显示服务器想要的数据。

curl -k -X POST -u name:pw -H "Content-type: application/json"
-H 'Accept:application/json''url'
-d'{parameters}'
--data-binary @file.wav

如果我排除上述行,该命令将按预期工作,告诉我没有输入文件。所以我认为文件可能有问题.wav

该代码将写入一些 JSON 格式的数据,紧跟 file.wav 的原始字节。这很可能不是接收服务器所期望的。通常,如果要同时发送文件和数据,则应使用 MIME 多部分编码。curl可能会自动为您执行此操作。最好通过连接调试代理(如 Fiddler)并观察curl实际发送的内容来确认该假设。然后尝试在 C# 中模拟它。

如果确实需要发送多部分消息,则了解您正在使用的 .NET 框架版本会很有帮助。在某些较新的版本中,有更简单的方法可以做到这一点。

相关内容

  • 没有找到相关文章

最新更新