【问题标题】:What all places to verify file upload size limit?验证文件上传大小限制的所有地方都有哪些?
【发布时间】:2016-03-07 04:05:39
【问题描述】:

我的 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 args,AsyncCallback 回调,对象状态) 在 System.Threading.Tasks.TaskFactory`1.FromAsyncTrim[TInstance,TArgs](TInstance thisRef, TArgs args, Func`5 beginMethod, Func`3 endMethod) 在 System.IO.Stream.BeginEndReadAsync(字节 [] 缓冲区,Int32 偏移量,Int32 计数) 在 System.IO.Stream.ReadAsync(字节 [] 缓冲区,Int32 偏移量,Int32 计数,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 的文件可以正常上传。

知道我应该寻找哪些位置来查看设置此限制的位置吗?

我的尝试:

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

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

【问题讨论】:

  • 你试过你设置<httpRuntime maxRequestLength="size in kilo bytes" />吗?
  • 我认为这个答案可能会有所帮助:stackoverflow.com/a/30870507/1718624
  • 是的,我尝试在配置文件中进行设置,在设置请求过滤功能后向我显示更新的值,但我仍然收到相同的错误。
  • 您确定您的站点中没有其他 web.config 文件吗?

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


【解决方案1】:

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

【讨论】:

  • 感谢您的回复,我已经更新了我的问题。我已经尝试过了,但它不适合我。
  • 两个都设置了吗?
  • 是的,我都设置了它们。
  • 我在我的本地尝试了这个并且它有效,但是在托管环境中,这不起作用。我已经验证了所有的 web.configs,它们都没有任何条目。我正在输入以增加我的 webapi 的 web.config 中的 maxRequestLength。我正在使用 SPA 调用我的 webAPI。该 SPA 应用的 web.config 是否也需要此条目。
  • 对不起@Reza,我仍然无法克服这个问题。我的 SPA 在文件上传中没有出现,但仍会尝试查看我是否遗漏了什么。此外,我的 SPA 与我的 webAPI 分开托管,因此不会继承配置条目。顺便说一句,您指定两个默认限制的答案消除了我的一些困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 2011-04-12
  • 2012-04-12
相关资源
最近更新 更多