什么地方验证文件上传大小限制?

时间:2015-12-02 18:58:54

标签: c# asp.net iis asp.net-web-api iis-7.5

我在IIS 7.5+上托管了我的ASP.NET WebAPI,默认的Max允许内容长度设置为30000000字节。

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

  

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

     

堆栈追踪:

     

at System.Web.HttpBufferlessInputStream。 ValidateRequestEntityLength ()   在System.Web.HttpBufferlessInputStream.GetPreloadedContent(Byte [] buffer,Int32& offset,Int32& count)   在System.Web.HttpBufferlessInputStream.BeginRead(Byte []缓冲区,Int32偏移量,Int32计数,AsyncCallback回调,对象状态)   在System.IO.Stream.b__d(Stream stream,ReadWriteParameters args,AsyncCallback callback,Object state)   在System.Threading.Tasks.TaskFactory`1.FromAsyncTrim [TInstance,TArgs](TInstance thisRef,TArgs args,Func`5 beginMethod,Func`3 endMethod)   在System.IO.Stream.BeginEndReadAsync(Byte []缓冲区,Int32偏移量,Int32计数)   在System.IO.Stream.ReadAsync(Byte []缓冲区,Int32偏移量,Int32计数,CancellationToken cancellationToken)   在System.Web.Http.WebHost.SeekableBufferedRequestStream.d__0.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束---   在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)    在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)   在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()   在System.Net.Http.HttpContentMultipartExtensions.d__8.MoveNext()

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

知道我应该找哪些地方看看这个限制的设定位置了吗?

我尝试了什么:

我检查过Server的Web.config,machine.config以及所有应用程序的web.config,但是在任何地方都没有看到任何大小限制条目。

我还尝试在webAPI的web.config - maxRequestLengthmaxAllowedContentLength文件中设置条目,这些文件在要求增加文件上传大小限制的各种其他问题中提到。在IIS中执行请求过滤功能时,我向我展示了新值,但对于大于4MB的文件,我仍然得到相同的异常。

1 个答案:

答案 0 :(得分:3)

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

您可以通过以下方式在web.config中设置maxRequestLength

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

此设置指定输入​​流缓冲的限制   阈值,以KB为单位。此限制可用于防止拒绝服务   例如,由用户发布大文件引起的攻击   服务器。

     

默认值为4096(4 MB)。

此外,您可以通过以下方式在web.config中设置maxAllowedContentLength

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

指定请求中内容的最大长度(以字节为单位)。

     

默认值为30000000。

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