À l'occasion, nous obtenons des robots qui aiment poster de mauvaises informations sur notre site Web (ils tentent une sorte d'attaque de réflexion) mais la chance pour nous, les tentatives sont arrêtées via la validation d'entrée par défaut que l'on obtient avec MVC.
C'est bien et tout, mais maintenant, nous voulons voir ce que les robots envoient et nous souhaitons enregistrer cette information. Malheureusement, quand on obtient et httpRequestvalidationException code>, l'entrée incriminée est tronquée au point d'être inutile ala; p>
3 Réponses :
Oui, vous pouvez. Utilisez httpRequest.Saveas code> pour enregistrer la requête HTTP entière (tampon) sur le disque, que vous pouvez ensuite lire-retour. P>
Le problème est que invoquant réellement demande.form code> fera le feu de validation (à nouveau). J'utiliserais
demande.inputtream code> directement, puis. Vous devrez peut-être rembobiner le flux avant de la lire à nouveau: P>
demande.inputtream.position = 0 code> p>
Oui, c'est pourquoi j'utilise un filtre d'action pour mettre mes mains à l'exception, comme le montre le code. Votre suggestion ne fait rien pour m'aider avec le problème réel.
Désolé, lisez-le un peu trop vite. Le problème est que, invoquant réellement demande.form code> fera le feu de validation (à nouveau). J'utiliserais
demande.inputtream code> directement, puis.
Voici la solution finale que j'ai proposée. Fonctionne comme un charme et ne nécessite pas d'interaction des systèmes de fichiers.
// Grab the contents of the request. Stream s = filterContext.RequestContext.HttpContext.Request.InputStream; byte[] data = new byte[s.Length]; s.Read(data, 0, (int)s.Length); string rawData = Encoding.UTF8.GetString(data); // And process it into something nice and readable. IEnumerable<string> fields = (from x in rawData.Split('&') select HttpUtility.UrlDecode(x)); string formatted = string.Join(Environment.NewLine, fields);
Surveillez, vous n'êtes pas disposé au InputStream code> après l'avoir terminé.
Je ne crée pas ou ne possède pas le flux alors pourquoi je le disposerais-je?