我有一个Web API项目。
我需要发布json数据和文件,文件已编码为base64字符串(最大200mb)。
如果我发送的数据不超过10mb,则下一个方法通常会正确地填充模型ImportMultipleFileModel。
[HttpPost]
public async Task<HttpResponseMessage> ImportMultipleFiles(ImportMultipleFileModel importMultipleFileModel)
{
var response = ImportFiles(importFileModel);
return response;
}
如果我发送更多信息,那么模型就会为空。
为什么?
所以我改变了方法签名为:
[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)
{ }
}
对于编码后的30 MB文件,我通常会得到JSON字符串形式的requestData。但是对于60 MB的文件,我得到了一个空字符串。为什么?
接下来我改变了方法。
[HttpPost]
public async Task<HttpResponseMessage> ImportMultipleFiles()
{
ImportMultipleFileModel importMultipleFileModel = null;
var requestData = Request.Content.ReadAsStringAsync().Result;
try
{
importMultipleFileModel = JsonConvert.DeserializeObject<ImportMultipleFileModel>(requestData);
}catch(Exception e)
{ }
}
反序列化失败,原因是由于OutOfMemoryException。
为什么?
更新: maxRequestLength,maxAllowedContentLength设置为2147483647