Wie vermeidet man HttpRequestValidationException in ASP.NET MVC, das die gleiche Ansicht rendert, die die Ausnahme verursacht hat
Ich möchte nur wissen, wie Sie zu validieren (oder zu reinigen) Benutzereingaben im ASP.NET MVC, so dass eine HttpRequestValidationException nicht geworfen werden unabhängig von den Werten vorgelegt. Zum Beispiel mit einem text-input, wenn der Benutzer Eingaben <BR/>
es zu einer Ausnahme führen, und der Gelbe Bildschirm des Todes angezeigt werden. Ich möchte das nicht. Ich möchte, um die Ausnahme zu fangen und sichtbar zu machen, eine benutzerfreundliche Fehler in der aktuellen Ansicht, vorzugsweise mit der Steuerung geladen mit den gleichen Werten gesendet.
Ich habe festgestellt, dass dies http://www.romsteady.net/blog/2007/06/how-to-catch-httprequestvalidationexcep.html, aber es ist nutzlos für meine Zwecke. Auch ich habe festgestellt, dass dies http://msdn.microsoft.com/en-us/library/aa973813.aspx und versuchte, in einem Modell binder, aber ich konnte nicht machen Sie zu arbeiten.
InformationsquelleAutor der Frage eKek0 | 2008-10-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit der neuesten version von ASP.NET MVC (die RC, die zum Zeitpunkt des Schreibens dieses) können Sie nur ein Attribut auf der controller-Klasse oder deine action-Methode, z.B.:
Den ValidateInputAttribute ist im System.Web.Mvc.
Aber wie schon andere gesagt haben, das Sie dann tun müssen, führen Sie Ihre eigenen manuelle Eingabe, überprüfung oder Reinigung.
Mithilfe von MVC 3, müssen Sie auch sicherstellen, dass dies in Ihrem Web.config:
<system.web><httpRuntime requestValidationMode="2.0" /></system.web>
InformationsquelleAutor der Antwort user66787
In ASP MVC 3 können Sie den
[AllowHtml]
Attribut auf einzelne Felder/Eigenschaften, die in Ihrem Modell/ViewModel, schalten Sie die Validierung für genau das Feld, das ist ganz nett. Ich werde dieses Attribut hinzufügen, um bestimmte Felder in meinem Modell, und verwenden Sie dann die ausgezeichnete AntiXSS Bibliothek (auch über NuGet) zu bereinigen, die Benutzereingabe durch den Aufruf derSanitizer.GetSafeHtmlFragment(mymodel.Description)
(wo der "Description" - Eigenschaft ist ein string-Eigenschaft auf meinem view model, das die[AllowHtml]
- Attribut angewendet wird)InformationsquelleAutor der Antwort Kevin Southworth
Für ein sehr ausführliches Beispiel, wie fangen diese (und andere) Ausnahmen mit einem filter finden Sie unter: http://code.google.com/p/geochat/source/browse/Source/Web/GeoChat.MvcExtensions/ExceptionHandlerAttribute.cs
Wird diese ermöglichen es Ihnen, halten Sie die Validierung auf, aber verhindern, dass die Benutzer sehen die "yellow screen of death".
Dies ist eine vereinfachte (vielleicht grob vereinfachte) version:
}
InformationsquelleAutor der Antwort JoshNaro
Stattdessen fangen die Fehler in der globalen.asax Application_Error, könnten Sie fangen Sie es durch hinzufügen einer Fehlerbehandlung für den controller, die explizit fängt diese Fehler und leitet auf die Ansicht mit einer Fehlermeldung und entsprechende Daten anzeigen.
Fand ich diese, etwas alte, post auf, wie dies mit den Parametern.
InformationsquelleAutor der Antwort tvanfosson
ValidateInputAttribute ist die richtige Methode für das deaktivieren der Validierung Anforderung. Deklarative Methode innerhalb der Ansicht (aspx) funktioniert nicht, weil controller ist verantwortlich für den Empfang der Anfrage (nicht anzeigen/aspx).
InformationsquelleAutor der Antwort dariol
Put Put ValidateRequest="false" auf Ihrer aspx-view-Erklärung, aber desinfizieren Benutzer die Eingabe von text in Ihrem code, um zu vermeiden, dass einige xss-Angriffe.
InformationsquelleAutor der Antwort Hrvoje Hudo