C# 带json的asp web.api的最大http请求大小
我有一个web api项目 我需要将json数据和文件一起作为编码的base64字符串(最大200MB)发布到那里 若我将数据发送到大约10MB,那个么下一个方法通常会得到正确填充的model ImportMultipleFileModelC# 带json的asp web.api的最大http请求大小,c#,json,http,asp.net-web-api,size,C#,Json,Http,Asp.net Web Api,Size,我有一个web api项目 我需要将json数据和文件一起作为编码的base64字符串(最大200MB)发布到那里 若我将数据发送到大约10MB,那个么下一个方法通常会得到正确填充的model ImportMultipleFileModel [HttpPost] public async Task<HttpResponseMessage> ImportMultipleFiles(ImportMultipleFileModel importMultipleFileModel)
[HttpPost]
public async Task<HttpResponseMessage> ImportMultipleFiles(ImportMultipleFileModel importMultipleFileModel)
{
var response = ImportFiles(importFileModel);
return response;
}
[HttpPost]
公共异步任务ImportMultipleFiles(ImportMultipleFileModel ImportMultipleFileModel)
{
var响应=导入文件(导入文件模型);
返回响应;
}
如果我发送更多,则模型为空
为什么?
因此,我将方法签名更改为:
[HttpPost]
public async Task<HttpResponseMessage> ImportMultipleFiles()
{
ImportMultipleFileModel importMultipleFileModel = null;
var requestData = await Request.Content.ReadAsStringAsync();
try
{
JsonConvert.
importMultipleFileModel = JsonConvert.DeserializeObject<ImportMultipleFileModel>(requestData);
}catch(Exception e)
{ }
}
[HttpPost]
公共异步任务ImportMultipleFiles()
{
ImportMultipleFileModel ImportMultipleFileModel=null;
var requestData=await Request.Content.ReadAsStringAsync();
尝试
{
JsonConvert。
importMultipleFileModel=JsonConvert.DeserializeObject(requestData);
}捕获(例外e)
{ }
}
对于编码的30MB文件,我通常以json字符串的形式获取requestData。对于60MB,我得到了空字符串。
为什么?
接下来我将方法更改为
[HttpPost]
public async Task<HttpResponseMessage> ImportMultipleFiles()
{
ImportMultipleFileModel importMultipleFileModel = null;
var requestData = Request.Content.ReadAsStringAsync().Result;
try
{
importMultipleFileModel = JsonConvert.DeserializeObject<ImportMultipleFileModel>(requestData);
}catch(Exception e)
{ }
}
[HttpPost]
公共异步任务ImportMultipleFiles()
{
ImportMultipleFileModel ImportMultipleFileModel=null;
var requestData=Request.Content.ReadAsStringAsync().Result;
尝试
{
importMultipleFileModel=JsonConvert.DeserializeObject(requestData);
}捕获(例外e)
{ }
}
由于OutOfMemoryException,反序列化失败
为什么?
UPD:
maxRequestLength,maxAllowedContentLength设置为2147483647尝试设置
此外,我会重新考虑以这种方式发布数据。阅读,主要是针对WCF,但我认为内容基本上是有效的
处理大型有效负载的策略是流式传输
最后一个例子的旁注;当您可以使用
wait
时,您不应该(或者很少)使用.Result
。写了一个很好的答案。它试图将60mb的字符串序列化到一个不允许这种情况的构造中。无论如何,您都不希望每个请求都有60mb的内存。这就是为什么您要么使用流,要么拆分已经完成的请求。设置为2147483647。抱歉,我没有指出。maxRequestLength设置修复了meI的ASP.NETWebForm项目的问题,该项目也提供了Web API。我使用了maxAlloweContentLength=“20971520”
20MB,它可以很好地用于网页,而API请求只支持较小的文件(高达13MB)。
<httpRuntime targetFramework="4.5" maxRequestLength="65536" />
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="52428800" />
</requestFiltering>
</security>