2008-09-08 7 views
1

J'implémente une exception HttpRequestValidationException dans mon gestionnaire Application_Error et, si possible, je souhaite afficher un message personnalisé.Response.StatusCode et Internet Explorer - Afficher un message personnalisé?

Maintenant, je pense au StatusCode. Dans mon exemple actuel, il en envoie 200, ce qui, je pense, ne devrait pas être fait. Je voudrais envoyer le (IMHO) plus approprié 400 Bad Request à la place. Cependant, en même temps, j'aimerais utiliser Response.Write pour entrer un message personnalisé. Firefox l'affiche correctement, mais IE7 me donne la page d'erreur Internet Explorer non utile par défaut. D'un côté, je suppose qu'Internet Explorer suppose simplement que tout <> 200 n'a tout simplement pas de "bon" contenu, et le RFC is not really clear ici.

Donc, je me demande juste, envoie un HTTP 200 pour une page d'erreur causée par une bonne pratique HttpRequestValidationException ou non? Y a-t-il de bonnes alternatives?

+0

Merci! Ma solution: J'ai créé un> 512 Byte Error.aspx, mais par Global.asax définira le StatusCode à 400, puis faire un Server.Transfer au lieu de Response.Redirect. Fonctionne bien avec AJAX et Internet Explorer. –

+0

Juste pour ajouter: Normalement, un Response.Redirect serait également une solution viable. Cependant, si vous utilisez ASP.net AJAX, vous serez également redirigé. Server.Transfer vous permet de rester sur la page en cours pour les requêtes AJAX et gérer l'erreur en JavaScript. Voir ma question HttpRequestValidationException. –

Répondre

4

Un code de réponse HTTP 200 n'indique pas d'erreur. Cela indique que tout allait bien. Vous ne devez pas utiliser un code de réponse 200 pour une erreur.

Internet Explorer affiche sa page «Erreurs amicales» si la réponse est inférieure à 512 octets. En savoir plus sur ce numéro: http://weblogs.asp.net/scottgu/archive/2006/04/09/442332.aspx,

+0

Bon à savoir, donc une solution serait de faire exploser la réponse à au moins 513 octets ce qui devrait être faisable. –

1

Non, ce n'est certainement pas une bonne pratique. Les codes d'état 2XX signifient (entre autres) que la demande est valide. Ce qui est juste le contraire d'élever une exception HttpRequestValidationException.

Je ne sais pas comment faire IE se comporter correctement, malheureusement. Un moyen un peu mieux que d'envoyer un 200 serait de le rediriger vers une page d'erreur, mais encore loin d'être parfait.

1

Internet Explorer affiche ce qu'il appelle un "message d'erreur HTTP amical" lorsque la réponse est 4xx ou 5xx. Cette option peut être désactivée par l'utilisateur dans la boîte de dialogue Tools.Options.Advanced [Browsing] d'IE. L'envoi d'un 200 pour une page d'erreur est généralement une mauvaise pratique.

Une alternative serait d'avoir une page "Error" valide qui est censé pour afficher les messages d'erreur (donc un 200 serait bon) et ensuite utiliser une redirection 3xx vers cette page.

+0

Cela semble vraiment une bonne idée. Je fais déjà des cauchemars en pensant comment faire fonctionner ce mécanisme avec AJAX, mais je vais me battre à cause de ça parce que je ne suis pas content de mon approche actuelle de Response.Write (html en dur), en tant qu'erreur séparée.aspx a d'autres avantages . –

Questions connexes