[ERROR]HttpRequest.FillInFormCollection <System.Web.HttpException> URL 編碼型式資料無效。

在web.config設定aspnet:MaxHttpCollectionKeys居然沒有用? 那是那裡的問題呢? 原來asp.net 1.1是要在機碼中設定!

今天同事問說程式發生以下的錯誤,

at System.Web.HttpValueCollection.FillFromEncodedBytes  <System.InvalidOperationException> 由於該物件目前的狀態,導致作業無效。 
at System.Web.HttpRequest.FillInFormCollection  <System.Web.HttpException> URL 編碼型式資料無效。

 

網路上說是要在web.config裡加入下列設定以提升POST參數的數量(預設是1,000個),

<appSettings>
  <add key="aspnet:MaxHttpCollectionKeys" value="2500" /> 
</appSettings>

但是設定了卻沒有用!

後來筆者發現它是ASP.NET 1.1的程式,所以那個設定需要寫在機碼之中,如下(from http://support.microsoft.com/kb/2661403/zh-tw),

 

注意 如果您是在 x86 系統上使用 ASP.NET 1.1,請將 DWORD 值新增到下列登錄機碼來調整此設定:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys

如果您是在 x64 系統上使用 ASP.NET 1.1,請將 DWORD 值新增到下列登錄機碼來調整此設定:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys

 

參考資料

具有大量表單金鑰、檔案或 JSON 裝載成員的 ASP.NET 請求失敗,並產生例外狀況

ASP.NET 發現重大資安弱點影響範圍涵蓋 ASP.NET 1.1 ~ 4.0

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^