過去に作成した ASP.NET のサイトで「更新ボタンを押したらエラーになる」との報告がきた。
スタックトレースは以下のようなもの。


'XXXX' アプリケーションでサーバー エラーが発生しました。
オブジェクトの現在の状態に問題があるため、操作は有効ではありません。
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および
例外の発生場所については、スタック トレースを参照してください。
例外の詳細: System.InvalidOperationException: オブジェクトの現在の状態に問題があるため、操作は
有効ではありません。
ソース エラー:
現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する
情報については、下の例外スタック トレースを使って確認できます。
スタック トレース:
[InvalidOperationException: オブジェクトの現在の状態に問題があるため、操作は有効ではありません。]
   System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding) +11373279
   System.Web.HttpRequest.FillInFormCollection() +329

[HttpException (0x80004005): URL にエンコードされたフォーム データが有効ではありません。]
   System.Web.HttpRequest.FillInFormCollection() +11487362
   System.Web.HttpRequest.get_Form() +157
   Microsoft.Web.Infrastructure.DynamicValidationHelper.<>c__DisplayClass12.b__e() +63
   Microsoft.Web.Infrastructure.DynamicValidationHelper.<>c__DisplayClass12.b__11() +20
   Microsoft.Web.Infrastructure.DynamicValidationHelper.DeferredCountArrayList.get_Count() +20
   System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) +34
   System.Web.HttpRequest.get_Form() +212
   System.Web.Mvc.HttpRequestExtensions.GetHttpMethodOverride(HttpRequestBase request) +160
   System.Web.Mvc.AcceptVerbsAttribute.IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo) +55
   System.Linq.Enumerable.All(IEnumerable`1 source, Func`2 predicate) +149
   System.Web.Mvc.ActionMethodSelector.RunSelectionFilters(ControllerContext controllerContext, List`1 methodInfos) +428
   System.Web.Mvc.ReflectedControllerDescriptor.FindAction(ControllerContext controllerContext, String actionName) +140
   System.Web.Mvc.ControllerActionInvoker.FindAction(ControllerContext controllerContext, 
ControllerDescriptor controllerDescriptor, String actionName) +27
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +148
   System.Web.Mvc.Controller.ExecuteCore() +159
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +335
   System.Web.Mvc.<>c__DisplayClassb.b__5() +62
   System.Web.Mvc.Async.<>c__DisplayClass1.b__0() +20
   System.Web.Mvc.<>c__DisplayClasse.b__d() +54
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +469
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375

確かに最近変更は行ったがまったく関係のない箇所だったので、調べてみたら Microsoft セキュリティ更新プログラム MS11-100 による影響だった模様。
下記のページの解決方法に従って、Web.config に設定を追加して解決。
http://support.microsoft.com/kb/2661403/ja


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