分享到:

System.InvalidOperationException: 对象的当前状态使该操作无效。

中文:

对象的当前状态使该操作无效。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.InvalidOperationException: 对象的当前状态使该操作无效。

日本語:

オブジェクトの現在の状態に問題があるため、操作は有効ではありません。

説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.InvalidOperationException: オブジェクトの現在の状態に問題があるため、操作は有効ではありません。

这种错误一般数据量较小的时候不会出现,而数据量较大的时候会出现。比如我出错误的这个地方,动辄就是上千条数据,出错几率相当大。

经调查,这个错误是2011年12月30日微软发布的一个非常规安全补丁MS11-100所引起的。

Microsoft 安全更新 MS11-100 将 HTTP 请求中窗体项、文件和 JSON 成员的最大数量限制为 1000。由于此更改,ASP.NET 应用程序拒绝拥有超过 1000 种这些元素的请求。执行这些类型请求的 HTTP 客户端将被拒绝,且 Web 浏览器中会出现错误消息。此错误消息通常都包含 HTTP 500 状态代码。每个应用程序上都可配置这个新限制。

引用自:https://support.microsoft.com/zh-cn/kb/2661403

Microsoft セキュリティ更新プログラム MS11-100 は、HTTP 要求内のフォーム キー、ファイル、および JSON メンバーの最大数を 1000 に制限します。この変更のために、ASP.NET アプリケーションは、1000 を超えるこれらの要素を含む要求を拒否します。このような種類の要求を実行する HTTP クライアントは拒否され、Web ブラウザーにエラー メッセージが表示されます。このエラー メッセージには通常 HTTP 500 ステータス コードが含まれています。この新しい制限は、アプリケーションごとに構成できます。

引用元:https://support.microsoft.com/ja-jp/kb/2661403

因此当Request的成员数量例如栏位等,超出1000时,就会引发上面的异常,虽然大部份情况下可能不太会有如此庞大的Request,但有时很难去预防使用者可能会发出这样的Request或是真的需要这样的需求,因此若是有必要的话可以借由调整web.config的设定将数值依需求做调整,来让程序运作正常,当然若非必要也就不用去调整,毕竟会把预设限制为1000就是因安全性上的考量才做调整的。

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

在web.config文件中增加或修改上面这一段,适当调整value的值,即可解决这个问题。

本文综合参考自以下页面:

この記事では以下のページを参照したこと:

中文:

https://support.microsoft.com/zh-cn/kb/2661403 《拥有许多窗体项、文件或 JSON 负载成员的 ASP.NET 请求由于异常失败》

http://bbs.csdn.net/topics/380135870 《System.InvalidOperationException异常~~~[问题点数:100分,结帖人rwm5366745]》

http://www.dotblogs.com.tw/ian/archive/2012/02/03/67764.aspx 《[ASP.NET] MS11-100安全性更新引發的異常》

日本語:

https://support.microsoft.com/ja-jp/kb/2661403  『多くのフォーム キー、ファイル、または JSON ペイロード メンバーを含む ASP.NET 要求が例外が発生して失敗する』

http://www.dotnet.jp/568 『[技術情報] オブジェクトの現在の状態に問題があるため、操作は有効ではありません。 対応(回避)方法』

http://freed411.doorblog.jp/archives/30018694.html 『ASP.NET フォームキーの最大数の制限』