2010-02-15 66 views
8

如何爲每個動作設置maxAllowedContentLength值?每動作設置MaxAllowedContentLength/maxRequestLength值

我有一些用於上傳文件的操作,每個都需要不同的maxAllowedContentLength值。

它是有道理的,我們不想使用操作過濾器,因爲我們想在IIS級別過濾此請求。另一方面,從編碼的角度來看,行動過濾器是最好的解決方案,因爲他們在之後來到的路線,所以我的路線改變了,它繼續工作。

在IIS6中,我知道我們可以使用<location>標記將maxRequestLength指定到特定位置。 我不知道如何在IIS7上使用這種方法,並且我不喜歡這種方法,因爲url路由是在web.config中手動編碼的。

解決此問題的最佳解決方案是什麼?

+1

太糟糕了,這個從來沒有被回答過 - 這是使用ASP.NET MVC編程文件上傳頁面時非常重要的一個主題。 –

回答

1

我沒有找到一種方法來實現這一點,我不認爲有這種方式。可能最好的做法是使用不同的IIS網站進行文件下載操作,並使用自定義web.config。

+0

必須有一種方法.. :)最有可能的是,你應該能夠使用反射和黑客進入.net運行時並修改配置。不容易,但它應該工作? (我過去做過類似的事情,在應用程序之間同步身份驗證密鑰。) – Onkelborg

+0

@Onkelborg想給出關於此的詳細答案?比我能接受它作爲答案... –

+0

我在ILSpy的幫助下挖掘了這個框架並挖掘了一下。我認爲最簡單的方法是重寫web.config,然後接受應用程序將重新啓動一次。但是,似乎可以在運行時重寫內存,但它非常複雜。 我不認爲你可以有不同的maxAllowedContentLength每個位置,但你可以有不同的maxRequestLength每個位置。 – 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。 –