每动作设置MaxAllowedContentLength/maxRequestLength值

问题描述:

如何为每个动作设置maxAllowedContentLength值?每动作设置MaxAllowedContentLength/maxRequestLength值

我有一些用于上传文件的操作,每个都需要不同的maxAllowedContentLength值。

它是有道理的,我们不想使用操作过滤器,因为我们想在IIS级别过滤此请求。另一方面,从编码的角度来看,行动过滤器是最好的解决方案,因为他们在之后来到的路线,所以我的路线改变了,它继续工作。

在IIS6中,我知道我们可以使用<location>标记将maxRequestLength指定到特定位置。 我不知道如何在IIS7上使用这种方法,并且我不喜欢这种方法,因为url路由是在web.config中手动编码的。

解决此问题的最佳解决方案是什么?

+1

太糟糕了,这个从来没有被回答过 - 这是使用ASP.NET MVC编程文件上传页面时非常重要的一个主题。 –

我没有找到一种方法来实现这一点,我不认为有这种方式。可能最好的做法是使用不同的IIS网站进行文件下载操作,并使用自定义web.config。

+0

必须有一种方法.. :)最有可能的是,你应该能够使用反射和黑客进入.net运行时并修改配置。不容易,但它应该工作? (我过去做过类似的事情,在应用程序之间同步身份验证密钥。) – Onkelborg

+0

@Onkelborg想给出关于此的详细答案?比我能接受它作为答案... –

+0

我在ILSpy的帮助下挖掘了这个框架并挖掘了一下。我认为最简单的方法是重写web.config,然后接受应用程序将重新启动一次。但是,似乎可以在运行时重写内存,但它非常复杂。 我不认为你可以有不同的maxAllowedContentLength每个位置,但你可以有不同的maxRequestLength每个位置。 – Onkelborg

为要进行不同过滤的区域创建单独的虚拟站点。

然后在您的IIS服务器上运行此命令。 (替换[IISWebsitename])

C:\Windows\System32\inetsrv>appcmd set config "[IISWebsitename]" -section:requestFiltering -requestLimits.maxAllowedContentLength:100000000 -commitpath:apphost 

这样可以为该网站一次启用100,000,000字节的上载数据。

+1

我不喜欢使用命令行。但是如果我已经在使用不同的网站,那我可以使用Web.config来设置maxAllowedContentLength。 –