我有一个使用.net 4.5.2的旧的ASP.NET API Web服务,我正在向我的控制器发布一个包含base64图像的对象,没有任何问题。现在问题来了,当我试图发布更多和更大的图像数据时,我得到了413请求实体太大的错误。我一直在查找东西,并尝试了所有我能在网上找到的东西,但没有运气。我正在寻找上传文件约10MB的大小。一件事,使我相信它的服务器相关的是,当运行服务下的iisexpress我可以上传大文件本地。
我已尝试将MaxRequestLength和MaxAllowableContentLength添加到Web配置中。
<system.web>
<!-- tell IIS to let large requests through -->
<httpRuntime maxRequestLength="52428800" />
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="52428800" />
</requestFiltering>
</security>
我还在IIS v6.2中的Windows 2012 R2服务器上进行了更改,以允许更大的文件。我还调整了服务器上的UploadReadAhead值。
我在API配置类中没有什么特别的东西。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
}
}
我的配置中用于此服务的绑定
<webHttpBinding>
<binding name="SecureServerBindingWithUserNameRest" maxReceivedMessageSize="52428800">
<readerQuotas maxArrayLength="10485760" />
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic" proxyCredentialType="None" />
</security>
</binding>
<binding name="webHttpTransportSecurityRest">
<security mode="Transport" />
</binding>
</webHttpBinding>
3条答案
按热度按时间a11xaf1n1#
您可以尝试此解决方案,尝试增加上载大小限制。IIS使用applicationHost.config和web.config文件中的uploadReadAheadSize参数。
1.打开IIS管理器
1.选择站点
1.双击“配置编辑器”
1.选择
system.webServer
,然后选择serverRuntime
1.将
uploadReadAheadSize
值修改为2147483647
1.单击“应用”
ss2ws0br2#
当我在发送包含大量PDFS的压缩文件时遇到此错误时,我找到的解决方案是除了maxRequestLength之外,还将requestLengthDiskThreshold添加到Web配置中:
我还添加了一个比90预设更长的超时,这样它就有时间发送文件了。只是要记住,requestlengthDiskthreshold一定不能超过maxRequestLength。
pw9qyyiw3#
您也可以考虑在发布大量内容之前执行一个伪get请求。当初始化https连接时,第一个请求不应该很大。一旦初始化https连接,后续请求就不会受到限制。