2008-09-30 15 views
9

J'ai un site Web ASP.NET 2.0 avec une page 404 personnalisée. Lorsque le contenu est introuvable, le site diffuse la page personnalisée 404 avec une chaîne de requête additionnelle de aspxerrorpath =/mauro.aspx. La page 404 est lui-même servi avec un statut HTTP de 200. Pour tenter de résoudre ce que j'ai ajoutéPages d'erreur personnalisées Google 404 et .NET

protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.StatusCode = 404; 
    } 

I ajouté le widget Google et ont deux problèmes avec elle. Dans Internet Explorer 7, il ne s'affiche pas où il le devrait. Si je l'ajoute au contenu, j'obtiens une «erreur inconnue» sur le trait 79 de la ligne 226 ou à peu près; Si je l'ajoute à la section head, les champs de recherche apparaissent au-dessus du contenu. Dans Firefox, cela fonctionne bien.

Donc mes questions sont:

  1. Comment puis-je le widget apparaissent en ligne?
  2. Comment puis-je faire la page d'erreur rendu en 404 avec le nom d'origine et le chemin du fichier étant demandé de sorte que lorsque je demande mauro.aspx je reçois le contenu de la page 404, mais avec la URL de mauro.aspx? (Je suppose que je à faire quelques URL rewriting dans le begin_request fichier global.asax, mais voudrais que cela a confirmé avant que je ne quoi que ce soit stupide.)

Répondre

1

J'ai manipulé le 404 en faisant cela dans le fichier global.asax

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    string url = Request.RawUrl; 
    if ((url.Contains(".aspx")) && (!System.IO.File.Exists(Server.MapPath(url)))) 
    { 
     Server.Transfer("/Error/FileNotFound.aspx"); 
    } 
} 

Maintenant, si quelqu'un peut m'aider avec le widget google ce serait génial!

+3

cette performance est-elle critique, vous vérifiez si le fichier existe ou non à chaque fois sur chaque demande. –

+0

Correct, je pourrais stocker un résultat dans un dictionnaire ou similaire à utiliser pour vérifier plus rapidement ... – Mauro

10

Il existe un nouveau mode de redirection dans ASP.NET 3.5 SP1 que vous pouvez maintenant utiliser afin qu'il ne redirige pas. Il affiche la page d'erreur, mais conserve l'URL de la même manière:

"Aussi bien pour les redirections d'URL Si vous définissez le mode redirect dans web.config sur" responseRewrite "vous pouvez éviter une redirection vers une page d'erreur personnalisée et laisser l'URL dans le navigateur n'a pas été modifiée. "

+0

Merci, mais nous utilisons. Net 2.0 dans cette instance, mais je vais garder l'info .net 3.5 sp1 à l'esprit. – Mauro

+0

Shoot je suis vraiment désolé, je dois avoir oublié la partie 2.0 de votre message au moment où j'ai fini de le lire. Ma faute. – mattlant

+0

Pas de problème, je peux l'utiliser comme argument pour utiliser 3.5 à l'avenir si :) – Mauro