响应状态代码 400:Bad 请求,因为发布的数据量很大 (httpclient)
Response Status code 400:Bad Request because of posting data with large size (httpclient)
我正在通过 httpclient 向网络服务方法发送一个包含文件和字符串的表单,如下所示:
using (FileStream fs = File.Open(FileFullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (var client = new HttpClient(new HttpClientHandler { UseProxy = false, Proxy = null }))
{
using (var formData = new MultipartFormDataContent())
{
client.Timeout = TimeSpan.FromMilliseconds(Timeout.Infinite);
//client.MaxResponseContentBufferSize = fs.Length;
HttpContent TokenContent = new StringContent(Token);
HttpContent fileStreamContent = new StreamContent(fs);
formData.Add(TokenContent, "Token");
formData.Add(fileStreamContent, Key, currentFile);
var response = await client.PostAsync(WebServiceOfServer, formData).ConfigureAwait(false);
// equivalent of pressing the submit button on the form
if (!response.IsSuccessStatusCode)
{
result = null;
}
else
{
result = response.Content.ReadAsStreamAsync().Result;
return true;
}
}
}
}
但是在发送大于2GB的文件时,响应状态码是400, BadRequest 句原因。
我设置了 client.MaxResponseContentBufferSize=fs.Length
并且 fs.Length
大于 2GB 并且它 returns 内部异常错误与此消息:
"Buffering more than 2147483647 bytes is not supported.\r\nParameter name: value\r\nActual value was 2380364657."
那?
在 web.config 中,我使用了以下代码:
<httpRuntime maxRequestLength="3145728" requestLengthDiskThreshold="3145728" targetFramework="4.5.1" requestValidationMode="2.0" executionTimeout="999999"/>
和
<requestLimits maxAllowedContentLength="3221225472"/>
发送其他小于2GB的文件是没有问题的。
我该如何解决我的问题?
正如下面的链接,答案是:如果你想通过 POST 发送一个大小大于 2GB 的文件,你必须使用拆分然后发送文件片段。
https://forums.asp.net/t/2124827.aspx?Response+Status+code+400+Bad+Request+because+of+posting+data+with+large+size+httpclient+
和
https://www.codeproject.com/Articles/43272/Uploading-Large-Files-Through-Web-Service
我正在通过 httpclient 向网络服务方法发送一个包含文件和字符串的表单,如下所示:
using (FileStream fs = File.Open(FileFullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (var client = new HttpClient(new HttpClientHandler { UseProxy = false, Proxy = null }))
{
using (var formData = new MultipartFormDataContent())
{
client.Timeout = TimeSpan.FromMilliseconds(Timeout.Infinite);
//client.MaxResponseContentBufferSize = fs.Length;
HttpContent TokenContent = new StringContent(Token);
HttpContent fileStreamContent = new StreamContent(fs);
formData.Add(TokenContent, "Token");
formData.Add(fileStreamContent, Key, currentFile);
var response = await client.PostAsync(WebServiceOfServer, formData).ConfigureAwait(false);
// equivalent of pressing the submit button on the form
if (!response.IsSuccessStatusCode)
{
result = null;
}
else
{
result = response.Content.ReadAsStreamAsync().Result;
return true;
}
}
}
}
但是在发送大于2GB的文件时,响应状态码是400, BadRequest 句原因。
我设置了 client.MaxResponseContentBufferSize=fs.Length
并且 fs.Length
大于 2GB 并且它 returns 内部异常错误与此消息:
"Buffering more than 2147483647 bytes is not supported.\r\nParameter name: value\r\nActual value was 2380364657."
那?
在 web.config 中,我使用了以下代码:
<httpRuntime maxRequestLength="3145728" requestLengthDiskThreshold="3145728" targetFramework="4.5.1" requestValidationMode="2.0" executionTimeout="999999"/>
和
<requestLimits maxAllowedContentLength="3221225472"/>
发送其他小于2GB的文件是没有问题的。
我该如何解决我的问题?
正如下面的链接,答案是:如果你想通过 POST 发送一个大小大于 2GB 的文件,你必须使用拆分然后发送文件片段。
https://forums.asp.net/t/2124827.aspx?Response+Status+code+400+Bad+Request+because+of+posting+data+with+large+size+httpclient+
和
https://www.codeproject.com/Articles/43272/Uploading-Large-Files-Through-Web-Service