所有验证文件上传大小限制的地方

本文关键字:验证 文件 | 更新日期: 2023-09-27 18:25:27

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

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

消息"超过最大请求长度。"

堆栈跟踪:

位于System.Web.HttpBufferlessInputStream。ValidateRequestEntityLength()位于System.Web.HttpBufferlessInputStream.GetPreloadedContent(Byte[]缓冲区,Int32&偏移量,Int32&计数)在System.Web.HttpBufferlessInputStream.BeginRead(Byte[]缓冲区,Int32偏移量,Int32计数,AsyncCallback回调,对象状态)在System.IO.Stream.b_d(流流、ReadWriteParameters参数、AsyncCallback回调、对象状态)位于System.Threading.Tasks.TaskFactory `1.FromAsyncTrim[TInstance,TArgs](TIinstance thisRef,TArgs args,Func`5 beginMethod,Func` 3 endMethod)位于System.IO.Stream.BeginEndReadAsync(Byte[]缓冲区,Int32偏移量,Int32计数)在System.IO.Stream.ReadAsync(Byte[]缓冲区、Int32偏移量、Int32计数、CancellationToken cancellionToken)位于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的文件上传良好

你知道我应该在哪里寻找这个限制吗?

我尝试过的:

我已经检查了服务器的Web.config、machine.config以及所有应用程序的Web.config,但没有看到任何关于大小限制的条目。

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

所有验证文件上传大小限制的地方

如上所述,您应该同时设置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配置文件层次结构和继承