Geri gönderme sırasında 'nesnenin geçerli durumu nedeniyle işlem geçerli değil' hatası


170

İyi çalışan bir aspx sayfası vardı, ama aniden "Nesnenin geçerli durumu nedeniyle işlem geçerli değil" hatasını alıyorum. bir geri gönderme yapıldığında.

Yığın izlemesi:

System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded () de
(] bayt Byte [kodlayan kodlama) System.Web.HttpValueCollection.FillFromEncodedBytes de
System.Web.HttpRequest.FillInFormCollection de ()

Birisi yardımcı olabilir mi?


Yanıtlar:


281

Birisi sayfanıza çok az form alanı gönderdi. Son güvenlik güncelleştirmesi tarafından sunulan yeni varsayılan maks. 1000'dir.

Web.config öğenizin <appsettings>bloğuna aşağıdaki ayarı eklemeyi deneyin . bu blokta MaxHttpCollection değerlerini en üst düzeye çıkarırsınız .net Framework tarafından ayarlanan varsayılan değerleri geçersiz kılar. değeri form ihtiyaçlarınıza göre değiştirebilirsiniz

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

Daha fazla bilgi için lütfen bu yazıyı okuyun . Microsoft'un güvenlik düzeltme ekiyle ilgili daha fazla bilgi için bu Bilgi Bankası makalesini okuyabilirsiniz



40

Sayfa görüntülemeyi gridview'ime uygulamadım ve 600'den fazla kayda (onay kutusu, düğmeler vb.) Kadar uzanıyor ve 2001 değeri işe yaramadı. Değeri, örneğin 10000 artırabilir ve test edebilirsiniz.

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

16

ASP.NET 1.1 için, bunun nedeni hala 1000'den fazla form alanı gönderen birisidir, ancak ayarın yapılandırma dosyası yerine kayıt defterinde değiştirilmesi gerekir. Aşağıdaki kayıt defterine MaxHttpCollectionKeys adlı bir DWORD olarak eklenmelidir.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0

Windows'un 32 bit sürümleri için ve

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

Windows'un 64 bit sürümleri için.


6

Yığın izlemeniz aşağıdaki gibi görünüyorsa, sunucuya çok sayıda json nesnesi gönderiyorsunuz

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)

Çözüm için, lütfen web yapılandırmanızı aşağıdaki anahtarla güncelleyin. Yığın izini alamıyorsanız, lütfen kemancı kullanın . Hala yardımcı olmazsa, lütfen sayıyı 10000'e yükseltmeyi deneyin.

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

Daha fazla ayrıntı için lütfen bu Microsoft kb makalesini okuyun

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.