C# 如何通过WebRequest发送大型post字符串数据?

C# 如何通过WebRequest发送大型post字符串数据?,c#,asp.net,winforms,httpwebrequest,webrequest,C#,Asp.net,Winforms,Httpwebrequest,Webrequest,我使用WebRequest通过post请求发送文件内容 当文件内容较少时,它工作正常,但当内容较大时,它不发送任何数据 WebRequest HttpWebRequest=WebRequest.Create(“http://testapi.com"); HttpWebRequest.Method=“POST”; HttpWebRequest.Headers.Add(“X-API-KEY”,APIKEY); byte[]data=Encoding.UTF8.GetBytes(postdata);

我使用WebRequest通过post请求发送文件内容

当文件内容较少时,它工作正常,但当内容较大时,它不发送任何数据

WebRequest HttpWebRequest=WebRequest.Create(“http://testapi.com");
HttpWebRequest.Method=“POST”;
HttpWebRequest.Headers.Add(“X-API-KEY”,APIKEY);
byte[]data=Encoding.UTF8.GetBytes(postdata);
HttpWebRequest.ContentType=“应用程序/x-www-form-urlencoded”;
HttpWebRequest.ContentLength=数据.Length;
Stream requestStream=HttpWebRequest.GetRequestStream();
requestStream.Write(数据,0,数据长度);
requestStream.Close();
我得到的是API端的空数组。它应该得到我发送的所有文件内容


我和邮递员试过了,效果很好。所以我认为问题出在c端。

你有一个大文件,首先你必须对它进行编码:

StringBuilder fileContents = new StringBuilder();
// Read the file and display it line by line.
System.IO.StreamReader file =
new System.IO.StreamReader(@"c:\test.txt");
while((line = file.ReadLine()) != null)
{
fileContents.Append( WebUtility.UrlEncod(line)+ '%0A');
}

file.Close();
之后

         Uri uri = new Uri("http://testapi.com");
         using(WebClient myWebClient = new WebClient())
         {
           myWebClient.Headers.Add("X-API-KEY",APIKEY);
           myWebClient.Headers.Add("Content-Type","application/x-www-form- urlencoded");

           string result = myWebClient.UploadString(uri ,"plu_str="+fileContents.ToString());
          }

您有一个大文件,首先必须对其进行编码:

StringBuilder fileContents = new StringBuilder();
// Read the file and display it line by line.
System.IO.StreamReader file =
new System.IO.StreamReader(@"c:\test.txt");
while((line = file.ReadLine()) != null)
{
fileContents.Append( WebUtility.UrlEncod(line)+ '%0A');
}

file.Close();
之后

         Uri uri = new Uri("http://testapi.com");
         using(WebClient myWebClient = new WebClient())
         {
           myWebClient.Headers.Add("X-API-KEY",APIKEY);
           myWebClient.Headers.Add("Content-Type","application/x-www-form- urlencoded");

           string result = myWebClient.UploadString(uri ,"plu_str="+fileContents.ToString());
          }


您是否已验证必须以
x-www-form-urlencoded
的形式发送数据?url编码时,服务需要什么样的数据?可能只是安全令牌激活/验证。我认为其他一切都很好,好像我从我的帖子数据中删除了一些内容,请求就会成功。因此,在我看来,主要问题是post数据的大量内容。因此,我认为这与安全令牌或任何其他post参数无关。对于
x-www-form-urlencoded
内容类型,您通常向服务发送Url编码(例如,请参阅)的键值对。你对数据进行Url编码了吗?也许可以尝试使用为您执行此任务的HttpClient(在本例中,使用
+
而不是
%20
对空格进行编码)。您正在发送什么类型的数据?是的,问题是因为编码。当对整个数据进行两次编码时,它工作正常。您是否验证必须以
x-www-form-urlencoded
的形式发送数据?url编码时,服务需要什么样的数据?可能只是安全令牌激活/验证。我认为其他一切都很好,好像我从我的帖子数据中删除了一些内容,请求就会成功。因此,在我看来,主要问题是post数据的大量内容。因此,我认为这与安全令牌或任何其他post参数无关。对于
x-www-form-urlencoded
内容类型,您通常向服务发送Url编码(例如,请参阅)的键值对。你对数据进行Url编码了吗?也许可以尝试使用为您执行此任务的HttpClient(在本例中,使用
+
而不是
%20
对空格进行编码)。您正在发送什么类型的数据?是的,问题是因为编码。当对整个数据进行两次编码时,效果很好。感谢您的回复。我有一个疑问。发送post数据后,我们将得到一些json响应。根据该响应,我们执行一些操作。有没有办法得到我们可以进一步处理的答复?谢谢,谢谢你的更新。我在这里也发现了这一点:但不幸的是,这没有帮助。我得到了与WebRequest相同的响应。有没有其他方法可以通过将内容分成块来发送请求。我找到了一个以块为单位读取响应流的解决方案,但没有找到类似于请求的解决方案。很抱歉,如果我在描述这个问题时不够清楚,因为我对c#没有太多经验,也可能是您发送了错误的编码字节,请尝试encoding.ASCII.GetBytes。它在邮递员处工作,因此问题就出现了。如果我发布来自postman的相同内容,它将工作良好,并在API端进行处理。但是如果我通过我的c代码发送相同的内容。它将在另一端显示一个空数组。尝试将编码更改为ASCII时得到了相同的结果。您可以授予远程访问权限吗?任何桌面或TeamViewer?感谢您的回复。我有一个疑问。发送post数据后,我们将得到一些json响应。根据该响应,我们执行一些操作。有没有办法得到我们可以进一步处理的答复?谢谢你的更新。我在这里也发现了这一点:但不幸的是,这没有帮助。我得到了与WebRequest相同的响应。是否还有其他方式可以通过将内容分成块发送请求。我找到了一个以块为单位读取响应流的解决方案,但没有找到类似于请求的解决方案。很抱歉,如果我在描述这个问题时不够清楚,因为我对c#没有太多经验,也可能是您发送了错误的编码字节,请尝试encoding.ASCII.GetBytes。它在邮递员处工作,因此问题就出现了。如果我发布来自postman的相同内容,它将工作良好,并在API端进行处理。但是如果我通过我的c代码发送相同的内容。它将在另一端显示一个空数组。尝试将编码更改为ASCII时得到了相同的结果。您可以授予远程访问权限吗?任何桌面或TeamViewer?