带有 json 的 asp web.api 的最大 http 请求大小
Posted
技术标签:
【中文标题】带有 json 的 asp web.api 的最大 http 请求大小【英文标题】:Maximum http request size for asp web.api with json 【发布时间】:2016-11-28 12:31:50 【问题描述】:我有 web api 项目。
我需要将带有文件的 json 数据发布为编码的 base64 字符串(最大 200 mb)。
如果我发送的数据最大约为 10 mb,那么下一个方法通常会得到正确填充的模型 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 文件,我通常将 requestData 作为 json 字符串。对于 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
【问题讨论】:
它试图将 60mb 的字符串序列化为一个不允许这样做的结构。您不希望以任何方式为每个请求保留 60mb 的内存。这就是您要么使用流,要么拆分请求的原因 【参考方案1】:尝试设置maxRequestLength
。
<httpRuntime targetFramework="4.5" maxRequestLength="65536" />
或者maxAllowedContentLength
(我总是搞不清哪个是哪个)。
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="52428800" />
</requestFiltering>
</security>
另外,我会重新考虑以这种方式发布数据。阅读this article form MSDN,主要是针对WCF的,但我认为内容大多是有效的。
处理大负载的策略是流式传输。
最后一个例子的旁注;当您可以使用await
时,您不应该(或者可能很少)使用.Result
。 Stephen Cleary 写了一个很好的答案 here。
【讨论】:
已经完成了。设置为 2147483647。抱歉,我没有指出。 maxRequestLength 设置为我解决了这个问题 我有一个 ASP.Net WebForm 项目,它也提供 Web API。我使用了maxAlloweContentLength="20971520"
20MB,它适用于网页,而 API 请求仅支持较小的文件(最大 13MB)。以上是关于带有 json 的 asp web.api 的最大 http 请求大小的主要内容,如果未能解决你的问题,请参考以下文章
Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化
ASP.NET Web API - 模型绑定不适用于 POST 上的 XML 数据