2015-12-02 95 views
4

我有IIS 7.5+的默认最大允许内容长度设置为30000000字节的ASP.NET WebAPI。什么地方可以验证文件上传大小限制?

当我在IIS上打开我的webAPI的Request Filtering功能并检查那里的条目时,它表示30000000字节,但是当我为webAPI上传大于4MB的文件时,它会抛出异常,如下所示。

消息“超出了最大请求长度”。

堆栈跟踪:

在System.Web.HttpBufferlessInputStream。 ValidateRequestEntityLength() 在System.Web.HttpBufferlessInputStream.GetPreloadedContent(字节[]缓冲液,的Int32 &偏移的Int32 &计数) 在System.Web.HttpBufferlessInputStream.BeginRead(字节[]缓冲液,的Int32偏移的Int32计数,AsyncCallback的回调,对象状态) at System.IO.Stream.b__d(Stream stream,ReadWriteParameters args,AsyncCallback callback,Object state) at System.Threading.Tasks.TaskFactory`1.FromAsyncTrim [TInstance,TArgs](TInstance thisRef,TArgs在System.IO.Stream.BeginEndReadAsync(Byte []缓冲区,Int32偏移量,Int32计数)上的参数为 (位于System.IO.Stream.ReadAsync(Byte []缓冲区,Int32偏移量,Int32计数,CancellationToken取消llationToken) at System.Web.Http.WebHost.SeekableBufferedRequestStream.d__0.MoveNext() ---从以前位置抛出异常的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task任务) 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务task) 在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 在System.Net.Http.HttpContentMultipartExtensions.d__8.MoveNext()

小于4MB的文件正在上传正常。

任何想法我应该寻找什么地方看看这个限制设置在哪里?

我曾尝试:

我已经检查服务器的Web.config,machine.config中以及所有应用程序的web.config,但看不到大小限制任何地方的任何条目。

我也尝试在webAPI的web.config - maxRequestLengthmaxAllowedContentLength文件中设置条目,如其他各种要求增加文件上传大小限制的问题中所述。在IIS中这样做的请求筛选功能向我展示了新的价值,但对于大于4MB的文件,我仍然得到相同的异常。

+0

你试过哟设置''? –

+0

我认为这个答案可能会有所帮助:http://stackoverflow.com/a/30870507/1718624 – JonFriesen

+0

这个怎么样:http://stackoverflow.com/questions/15506648/how-to-upload-a-large-file -with-asp-net-mvc4-web-api-with-progressbar – lcryder

回答

3

如上所述here您应该同时设置maxRequestLengthmaxAllowedContentLength

您可以在网页中设置maxRequestLength。CONFIG这种方式:

<system.web> 
    <httpRuntime maxRequestLength="size in kilo bytes" /> 
</system.web> 

此设置指定极限的输入流缓冲 阈值时,在KB。此限制可用于防止例如由用户向服务器发送大文件导致的拒绝服务 攻击。

默认值为4096(4 MB)。你

也可以设置maxAllowedContentLength在web.config中这样说:

<system.webServer> 
    <security> 
     <requestFiltering> 
      <requestLimits maxAllowedContentLength="size in bytes" /> 
     </requestFiltering> 
    </security> 
</system.webServer> 

指定内容的最大长度要求,以字节为单位。

的默认值是30000000

另外,还要确保你改变在正确的文件的配置。有关asp.net配置文件的更多信息,你可以看到ASP.NET Configuration File Hierarchy and Inheritance

+1

感谢您的回复,我已经更新了我的问题。我已经试过这个,它不适合我。 – Guanxi

+0

你有没有设置它们? –

+0

是的,我设置了他们两个。 – Guanxi

相关问题