'Hoạt động không hợp lệ do lỗi trạng thái hiện tại của đối tượng' trong quá trình gửi lại


170

Tôi đã có một trang aspx đang hoạt động tốt, nhưng đột nhiên tôi gặp lỗi "Thao tác không hợp lệ do trạng thái hiện tại của đối tượng." Bất cứ khi nào một postback được thực hiện.

Dấu vết ngăn xếp là:

tại System.Web.HttpValueCollection.Throw IfMaxHttpCollectionKeysExceeded ()
tại System.Web.HttpValueCollection.FillFromEncodingBytes (Byte [] byte, mã hóa mã hóa)
tại System.Web.HttpRequest.Fill

Ai đó có thể giúp gì không?


Câu trả lời:


281

Ai đó đã đăng khá nhiều trường mẫu lên trang của bạn. Tối đa mặc định mới được giới thiệu bởi bản cập nhật bảo mật gần đây là 1000.

Hãy thử thêm cài đặt sau vào <appsettings>khối web.config của bạn . trong khối này, bạn đang tối đa hóa các giá trị MaxHttpCollection, điều này sẽ ghi đè mặc định được đặt bởi .net Framework. bạn có thể thay đổi giá trị phù hợp theo nhu cầu biểu mẫu của bạn

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

Để biết thêm thông tin xin vui lòng đọc bài viết này . Để hiểu rõ hơn về bản vá bảo mật của microsoft, bạn có thể đọc bài viết cơ sở Kiến thức này



40

Tôi đã không áp dụng phân trang trên chế độ xem lưới của mình và nó mở rộng tới hơn 600 bản ghi (với hộp kiểm, nút, v.v.) và giá trị của năm 2001 không hoạt động. Bạn có thể tăng giá trị, nói 10000 và kiểm tra.

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

16

Đối với ASP.NET 1.1, điều này vẫn là do ai đó đăng hơn 1000 trường biểu mẫu, nhưng cài đặt phải được thay đổi trong sổ đăng ký thay vì tệp cấu hình. Nó nên được thêm dưới dạng DWORD có tên MaxHttpCollectionKeys trong sổ đăng ký bên dưới

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0

cho phiên bản 32 bit của Windows và

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\1.1.4322.0

cho phiên bản 64 bit của Windows.


6

Nếu theo dõi ngăn xếp của bạn trông giống như sau thì bạn đang gửi một lượng lớn các đối tượng json đến máy chủ

Operation is not valid due to the current state of the object. 
    at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)
    at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
    at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
    at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
    at System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)
    at Failing.Page_Load(Object sender, EventArgs e) 
    at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
    at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
    at System.Web.UI.Control.OnLoad(EventArgs e)
    at System.Web.UI.Control.LoadRecursive()
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Để giải quyết, vui lòng cập nhật cấu hình web của bạn bằng phím sau. Nếu bạn không thể có được dấu vết ngăn xếp thì hãy sử dụng fiddler . Nếu vẫn không được thì hãy thử tăng số lên 10000 hoặc thứ gì đó

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

Để biết thêm chi tiết, vui lòng đọc này bài viết kb Microsoft

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.