J'ai un problème de code hérité qui exige que je prenne en charge des urls aléatoires comme s'il s'agissait de requêtes pour la page d'accueil. Certaines de ces URL contiennent des caractères qui génèrent l'erreur suivante "Une valeur potentiellement dangereuse de Request.Path a été détectée depuis le client (&)" . Le site est écrit avec ASP.Net MVC 3 (en C#) et fonctionne sur IIS 7.5.
Voici un exemple d'URL...
http://mywebsite.com/Test123/This_&_That
Voici comment j'ai configuré ma route "attrape-tout" (j'ai d'autres routes pour attraper des pages spécifiques)...
routes.MapRoute(
"Default", // Route name
"{garb1}/{garb2}", // URL with parameters
new { controller = "Website", action = "Home", garb1 = UrlParameter.Optional, garb2 = UrlParameter.Optional } // Parameter defaults
);
J'ai ajouté les éléments suivants à mon fichier web.config...
<configuration>
<system.web>
<pages validateRequest="false" />
<httpRuntime requestValidationMode="2.0" />
</system.web>
<configuration>
J'ai également ajouté l'attribut ValidateInput à l'action qui doit capturer les urls...
public class WebsiteController : Controller
{
[ValidateInput(false)]
public ActionResult Home()
{
return View();
}
}
Mais je reçois toujours l'erreur. Une idée de la raison ? Ai-je manqué quelque chose ? Pour l'instant, je ne fonctionne que sur mon serveur de développement local (je n'ai pas encore essayé ces corrections en production).
1 votes
Il y a un paramètre pour autoriser certains caractères que je vérifierai bientôt quand je serai de retour sur mon ordinateur...... mais pouvez-vous urlencoder votre URL ?
0 votes
Duplicata possible de Une valeur Request.Path potentiellement dangereuse a été détectée depuis le client (*)
0 votes
Je ne sais pas pour quelle raison le site web essayait en interne une redirection qui créait une URL comme ''. localhost/://localhost/myWebsiteName qui me donnait la même erreur. Je ne sais pas pourquoi ASP.net pipeline considère que c'est une URL de requête dangereuse.
0 votes
Dans mon cas, il manquait un slash dans l'URL. La première chose à faire est de vérifier s'il y a une faute de frappe dans l'URL.