2016-04-07 8 views
0

Die Login-Seite unserer Webanwendung wird in regelmäßigen Abständen mit Fehlerereignissen aus dem beschädigten Viewstate angezeigt. Warum das passiert ist egal - einige davon können Crack-Skripte oder was auch immer sein. Mir wurde gesagt, diese Fehler zu beseitigen. Zuerst habe ich ViewState für die Seite deaktiviert. Das ließ noch einen kurzen __VIEWSTATE übrig, der "leer" sein konnte, aber immer noch Struktur hatte. Das hat nichts getan, um die Fehler zu verhindern.Wie kann ich die Verwendung von __VIEWSTATE auf einer einzigen Seite vollständig eliminieren?

Dann habe ich die Methoden SavePageStateToPersistenceMedium und LoadPageStateFromPersistenceMedium der Seite mit No-Ops überschrieben. Dadurch wurde der gesamte Inhalt in __VIEWSTATE ... gelöscht, aber das Fehlerproblem wurde dadurch immer noch nicht gelöst. Das ausgeblendete Feld ist weiterhin auf der Seite vorhanden. Wenn Sie vor dem Zurückschreiben einen Wert festlegen, werden weiterhin Ausnahmen mit der Meldung "Die Statusinformationen sind für diese Seite ungültig und möglicherweise beschädigt" ausgegeben.

Der Fehler wird von ClientScriptManager.ValidateEvent ausgelöst, das von TextBox.LoadPostData oder HiddenField.LoadPostData aufgerufen wird, wenn ich keine serverseitigen Textfelder habe. Ich verstehe nicht, warum es denkt, dass es auf Status prüfen muss, wenn es sowohl auf der Seitenebene deaktiviert als auch in den Speicher-/Ladephasen neutralisiert wird, aber darauf besteht es. Gibt es etwas, das ich überlasten kann, um diese nutzlose Validierungsprüfung zu verhindern?

Mein Chef möchte, dass ich diese Seite VOLLSTÄNDIG frei von Viewstate-Verhalten mache, so dass sie keinerlei Form von Viewstate-bezogenen Daten erzeugt oder in irgendeiner Weise darauf reagiert. Er möchte, dass keine veröffentlichten Daten jemals einen Viewstate-bezogenen Code auslösen. Alle normalen Validierungen müssen jedoch für den Rest der App beibehalten werden. Änderungen gelten nur für diese einzelne Seite. Wie kann dies erreicht werden?

[update] Eine andere Sache, die nicht funktioniert, ist das Überschreiben der PageStatePersister-Methode der Seite. Ich habe auch versucht, die Ausgabe des versteckten Feldes in der Render-Methode der Seite zu verhindern, aber wenn ich sie für den Post wieder hinzufüge, tritt die Ausnahme immer noch auf.


[update] ... Ich glaube, mein Chef jetzt bereit ist, dies zu verzichten auf das Erreichen. Aber wenn jemand eine Antwort hat, hast du meine Bewunderung.

+0

Ich verstehe es nicht ... soweit ich es sehen können Kein ClientScriptManager-Objekt auf der Client-Seite, und es gibt keine ValidateEvent-Eigenschaft für den Skript-Manager auf der Serverseite. Und wird eine JS-Optimierung wirklich die serverseitige Validierungsaktion verhindern? Scheint unwahrscheinlich. –

+0

Tut mir leid Paul, der ClientScriptManager ist das serverseitige Objekt, dachte an etwas anderes, das von ASP.NET AJAX verwendet wurde. – CodingGorilla

Antwort

0

Sie betrachten die Control State, die im html Feld gespeichert wird.

Steuerzustand wird zum Beispiel verwendet, um die Pager-Informationen zu speichern: https://msdn.microsoft.com/en-us/library/1whwt1k7.aspx

Decode es einen Blick zu haben: How to decode viewstate

+0

Ich habe schon alle Viewstate-Inhalte gelöscht, also gibt es nichts zu dekodieren. Ich versuche, das Viewstate-Parsing zu eliminieren, so dass es beispielsweise nicht durch ein bösartiges gefälschtes verstecktes Feld gestört werden kann. An dieser Stelle werde ich mich mit einem vernünftigen Weg begnügen, die Fehler zu finden. –