2009-07-10 8 views
9

Ich versuche zu deaktivieren Anfrage Validierung für alle Aktionsmethoden in einem Controller, indem Sie diese deaktivieren:Ich kann nicht anfordern Validation für einen ASP.NET MVC-Controller

[ValidateInput(false)] 
public class MyController : Controller 
{ 
    ... 

Die Referenz ich verwende, sagt Das ist möglich und sagt mir, dass ich es so machen soll, aber aus irgendeinem Grund funktioniert es nicht.

Wenn ich eine html einreichen (auch ein einfacher <b>-Tag) durch ein Textfeld, erhalte ich die Fehlermeldung:

A potentially dangerous Request.Form value was detected from the client (text=<b>").

Es ist auch nicht funktioniert, indem das Attribut auf ein einzelnes Verfahren zu befestigen.

Wie kann ich die Anforderungsvalidierung für einen Controller deaktivieren?

EDIT

ich in VS2008 in Testserver aufgebaut arbeite.

+0

Basierend auf all die Dinge, die nicht funktioniert hat, werden Sie viel mehr Details liefern müssen. Laufen Sie in IIS oder Cassini? Du betreibst MVC v1.0, richtig? Was ist die Methodensignatur der fehlgeschlagenen Aktion? – GalacticCowboy

+4

Ich liebe es, wenn ich jemanden finde, der genau die Frage stellt, die ich habe - nur um zu sehen, dass er geschlossen ist, weil er nicht auf andere Besucher anwendbar ist. FML. –

Antwort

14

Ich testete es auf meiner Maschine, sowohl auf der Klassendefinition als auch der Aktionsmethode, und es funktionierte für mich in beiden Fällen. Sind Sie sicher, dass Ihre Ansicht mit Ihrer Methode/Ihrem Controller übereinstimmt? Setzen Sie das Attribut auf die GET-Methode oder die POST-Methode?

[AcceptVerbs(HttpVerbs.Post)] 
[ValidateInput(false)] 
public ActionResult MyAction (int id, string content) { 
    // ... 
} 
+0

In der ursprünglichen Frage habe ich festgestellt, dass ich das getan habe. Und meine Referenz, Apress Pro ASP.NET MVC Framework, sagt eindeutig, "Wenn Sie es entweder für eine bestimmte Aktionsmethode oder über einen bestimmten Controller deaktivieren möchten, können Sie den Filter [ValidateInput], wie folgt verwenden: [ ValidateInput (false)] öffentliche Klasse MyController: Controller {...} " –

+0

Siehe http://stackoverflow.com/questions/807662/why-is-validateinputfalse-not-working –

+2

Sorry, Ronnie. Es funktioniert auf meiner Maschine, ob ich das Attribut auf die Methode oder die Klasse setze. –

2

Pro ASP.NET MVC Framework (P466) sagt der folgende funktionieren soll:

public class MyController : Controller 
{ 
    public MyController() { 
     ValidateRequest = false; 
    } 
} 
+0

Es wird dort nicht intellisense oder kompiliert. Ich habe versucht, es in die Action-Methode (wo es intellisense tut), aber es hat nicht funktioniert. –

+0

"ValidateRequest = false;" soll im Konstruktor sein. Ich hatte es auf einem meiner Controller versucht, aber es falsch transkribiert. – keithm

+0

Es funktioniert, wenn Sie es in den Konstruktor einfügen. –

0

Können Sie Ihre Controller-Datei und Ihre View-Datei schreiben.

Dies funktioniert;

MytestController --------------------------------

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Mvc.Ajax; 

namespace testapp.Controllers 
{ 
    [ValidateInput(false)] 
    public class MyTestController : Controller 
    { 

     public ActionResult Index() 
     { 
      return View(); 
     } 

    } 
} 

MyTest (Index) - -------------------------------------------------- ---

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>Index</title> 
</head> 
<body> 
<% using (Html.BeginForm()) { %> 
<%= Html.TextBox("test")%> 
<button type="submit" >Submit</button> 
<%} %> 
</body> 
</html> 
+0

Ihr Beispiel für asp.net mvc 2 funktioniert nicht – IEnumerator

12

um es arbeiten müssen Sie web.config ändern auch:

<system.web> 
    <httpRuntime requestValidationMode="2.0"/> 
    ... 
</system.web> 
+0

Ich hatte ein ASP.NET MVC 1.0-Projekt in der Produktion seit über einem Jahr im Einsatz, heute Abend sendet mir der Client eine E-Mail, dass eines der Formulare, die einen WYSIWYG-Editor verwendet einreichen. Ich hatte [ValidateInput (false)] für die Aktion, solange die Site bereitgestellt wurde und bis vor Kurzem funktionierte. Der Hosting-Provider muss etwas an seinem Ende geändert haben. Ich habe das httpRuntime-Tag zu der system.web hinzugefügt, wie Jan vorgeschlagen hat, und es hat mein Problem behoben. –