Ottenere “Un valore Request.Path potenzialmente pericoloso è stato rilevato dal client (&)”

Ho un problema di codice legacy che richiede il supporto di URL casuali come se fossero richieste per la home page. Alcuni URL contengono caratteri che generano l’errore “È stato rilevato un valore Request.Path potenzialmente pericoloso dal client (&)” . Il sito è stato scritto con ASP.Net MVC 3 (in C #) ed è in esecuzione su IIS 7.5.

Ecco un URL di esempio …

http://mywebsite.com/Test123/This_&_That 

Ecco come ho la mia impostazione di percorso catch-all (ho altri percorsi per catturare pagine specifiche) …

 routes.MapRoute( "Default", // Route name "{garb1}/{garb2}", // URL with parameters new { controller = "Website", action = "Home", garb1 = UrlParameter.Optional, garb2 = UrlParameter.Optional } // Parameter defaults ); 

Ho aggiunto le seguenti cose al mio file web.config …

       

Ho anche aggiunto l’attributo ValidateInput all’azione che dovrebbe catturare gli URL …

 public class WebsiteController : Controller { [ValidateInput(false)] public ActionResult Home() { return View(); } } 

Ma sto ancora ricevendo l’errore. Qualche idea, perché? Ho dimenticato qualcosa? In questo momento sto solo girando sul mio server locale di sviluppo (non ho ancora provato queste correzioni in produzione).

Mentre puoi provare queste impostazioni nel file di configurazione

     

Eviterei di usare caratteri come “&” nel percorso URL sostituendoli con caratteri di sottolineatura.

Ho affrontato questo tipo di errore. chiamare una funzione dal razor.

 public ActionResult EditorAjax(int id, int? jobId, string type = ""){} 

risolvilo cambiando la linea

a partire dal

  

a

  

dove è il mio route.config

 routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new string[] { "RPMS.Controllers" } // Parameter defaults ); 

Se si desidera consentire i tag HTML solo per poche caselle di testo in mvc

Puoi fare una cosa

nel controller

  [ValidateInput(false)] public ActionResult CreateNewHtml() //view { return View(); } [ValidateInput(false)] [HttpPost] public ActionResult CreateNewHtml(cbs obj)//view cbs is database class { repo.AddHtml(obj); return View(); } 

Stavamo ottenendo lo stesso errore in Fiddler quando cercavamo di capire perché il nostro visualizzatore di mappe Silverlight ArcGIS non stava caricando la mappa. Nel nostro caso è stato un refuso nell’URL del codice. C’era un segno di uguale là dentro per qualche motivo.
http: // = someurltosome / awesome / luogo
invece di
http: // someurltosome / awesome / luogo

Dopo aver eliminato quel segno di uguale, ha funzionato benissimo (ovviamente).