按操作设置MaxAllowedContentLength/maxRequestLength值

8

如何针对每个操作设置maxAllowedContentLength值?

我有几个上传文件的操作,每个操作需要不同的maxAllowedContentLength值。

我们不希望使用操作过滤器来过滤请求,因为我们希望在IIS级别上过滤此请求。另一方面,从编码角度来看,操作过滤器是最好的解决方案,因为它们在路由之后出现,所以如果路由发生变化,它仍然可以正常工作。

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

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


1
很遗憾,这个问题从未得到解答 - 当使用ASP.NET MVC编程文件上传页面时,这是一个非常重要的主题。 - Maxim V. Pavlov
2个回答

1

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


一定有办法... :) 很可能,你可以使用反射并侵入 .net 运行时并修改配置。虽然不容易,但应该可行?(我以前做过类似的事情,例如在应用程序之间同步认证密钥。) - Onkelborg
@Onkelborg想详细回答这个问题吗?如果是的话,我就能接受它作为答案了... - Fitzchak Yitzchaki
我已经借助ILSpy深入研究了这个框架并进行了一些挖掘。我认为最简单的方法是重写web.config,然后接受应用程序将重新启动一次。但是,在运行时在内存中重写似乎是可行的,但是相当麻烦。我认为您无法在每个位置上拥有不同的maxAllowedContentLength,但是您可以在每个位置上拥有不同的maxRequestLength。 - Onkelborg
你最好的选择是编辑 web.config 文件并接受重启。个人而言,我不会在运行时搞这种配置的更改,尽管这是可能的。我的调查表明,要想做到一切正确,这是一个相当复杂的过程,而且谁知道未来会发生什么变化呢? - Onkelborg

0
创建一个单独的虚拟站点,为您需要进行不同过滤的区域。
然后在您的IIS服务器上运行此命令。(将[IISWebsitename]替换为实际网站名称)
C:\Windows\System32\inetsrv>appcmd set config "[IISWebsitename]" -section:requestFiltering -requestLimits.maxAllowedContentLength:100000000 -commitpath:apphost

这使得一个网站可以一次性上传 100,000,000 字节的数据。


1
我不喜欢使用命令行。但是如果我已经在使用另一个网站,我可以使用Web.config来设置maxAllowedContentLength。 - Fitzchak Yitzchaki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接