2009-07-10 8 views
9

sto cercando di spegnere richiesta di convalida per tutti i metodi di azione in un controller in questo modo:non riesco a spegnere richiesta di convalida per un controller ASP.NET MVC

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

Il riferimento sto usando dice questo è possibile e mi dice di farlo in questo modo, ma per qualche motivo non funziona.

Se posso inviare qualsiasi html (anche un semplice <b> tag) attraverso una casella di testo, ottengo l'errore:

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

E 'anche non funziona collegando l'attributo a un metodo individuale.

Come disabilitare Convalida richiesta per un controller?

EDIT

sto lavorando in VS2008 costruito nel server di test.

+0

sulla base di tutte le cose che non funziona, dovrete fornire molti più dettagli. Stai utilizzando IIS o Cassini? Stai eseguendo MVC v1.0, giusto? Qual è la firma del metodo dell'azione che sta fallendo? – GalacticCowboy

+4

Amo quando trovo qualcuno che fa la domanda esatta che ho - solo per vedere che è chiuso per non essere applicabile ad altri visitatori. FML. –

risposta

14

L'ho testato sulla mia macchina, sia sulla definizione della classe che sul metodo di azione, e ha funzionato per me in entrambi i casi. Sei sicuro che la tua vista sia allineata con il tuo metodo/controller? Stai inserendo l'attributo nel metodo GET o nel metodo POST?

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

Nella domanda originale, ho dichiarato che l'ho fatto. E il mio riferimento, Apress Pro ASP.NET MVC Framework, afferma chiaramente: "Se si desidera disattivare esso sia per un metodo di un'azione specifica o attraverso un controller specifico, è possibile utilizzare il filtro [ValidateInput], come segue: [ ValidateInput (false)] public class MyController: Controller {...} " –

+0

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

+2

Siamo spiacenti, Ronnie. Funziona sulla mia macchina, indipendentemente dal fatto che inserisca l'attributo nel metodo o nella classe. –

2

Pro ASP.NET MVC Framework (P466) dice il seguente dovrebbe funzionare:

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

Non si tratta di intellisense o di compilazione. Ho provato a metterlo nel metodo di azione (dove funziona intellisense), ma non ha funzionato. –

+0

"ValidateRequest = false;" dovrebbe essere nel costruttore. Avevo provato su uno dei miei controller ma l'ho trascritto in modo errato. – keithm

+0

Funziona se lo metti nel costruttore. –

0

potete inserire il file controller e il file vista.

Questo funziona;

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 (Indice) - -------------------------------------------------- ---

<%@ 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

il tuo esempio per asp.net mvc 2 non funziona – IEnumerator

12

per farlo funzionare è necessario modificare web.config così:

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

Ho avuto un progetto ASP.NET MVC 1.0 distribuito in produzione per oltre un anno, stasera il client mi invia un'e-mail che mi dice che una delle forme che usa un editor WYSIWYG non sarà Sottoscrivi. Ho avuto [ValidateInput (false)] sull'azione per tutto il tempo in cui il sito è stato distribuito e ha funzionato fino a poco tempo fa. Il provider di hosting deve aver cambiato qualcosa sulla loro fine. Ho aggiunto il tag httpRuntime al system.web come suggerito da Jan e ha risolto il problema. –

Problemi correlati