2013-08-20 2 views
2

Je reçois une exception automatique de la méthode CheckInvalidPathChars() lorsque je mets un caractère non valide comme <, > dans l'URL.Comment faire pour attraper CheckInvalidPathChars() exception

Le chemin est vérifié automatiquement et je voudrais attraper l'exception afin de rediriger l'utilisateur vers la page 404 error.

Comment puis-je attraper cette exception?

Infodesks:
J'utilise Umbraco 4.9.0


La solution J'ai trouvé:

J'ai créé le fichier Global.asax dans la racine du projet. Ce fichier a, entre autres, la méthode "Application_Error", qui se déclenche lorsqu'il y a un caractère illégal dans l'URL.

J'ai effectué cette méthode avec le code suivant:

protected void Application_Error(object sender, EventArgs e) 
    { 
     Server.ClearError(); 
     string errorTemplate = library.RenderTemplate(nodeId); 
     HttpContext.Current.Response.Clear(); 
     HttpContext.Current.Response.AddHeader("Content-Length", errorTemplate.Length.ToString()); 
     HttpContext.Current.Response.Write(errorTemplate); 
     HttpContext.Current.Response.Flush(); 
     HttpContext.Current.Response.Close(); 
    } 

Hope this helps!

Répondre

0

Je voudrais utiliser un bloc try-catch pour elle:

try 
{ 
    // code that could throw the exception - probably when you call the CheckInvalidPathChars() method 
} 
catch (Exception e) 
{ 
    // exception code 
} 

Plus à https://stackoverflow.com/a/1177444/2402338 vous pouvez trouver une réponse sur la façon d'attraper une exception spécifique.

+0

Peut-être que je n'ai pas expliqué le problème correctement. Je sais avec try/catch que je peux contrôler une exception. Le problème est que Umbraco exécute CheckInvalidPathChars() quelque part, et je n'ai aucun moyen d'y mettre un try/catch. Comment puis-je contrôler cela dans ce cas? – jbartolome

+0

Je pense que l'endroit à regarder n'est pas dans le code Umbraco. Il me semble que ASP.NET exécute cette méthode. J'ai pris un coup d'oeil à travers le code source d'Umbraco 4.9.0 et une recherche dans VS n'a rien révélé pour CheckInvalidPatchChars(). Peut-être que la question suivante aidera: http://stackoverflow.com/questions/5082662/how-to-redirect-404-bad-urls-to-the-homepage –

+0

Merci, ça m'a donné l'idée d'utiliser global.asax .cs avec la méthode Application_Error! :) – jbartolome

1

Eh bien la réponse est assez simple - ne mettez pas des caractères non valides dans l'URL :-)

Mais sérieusement, au lieu d'essayer d'attraper l'erreur, essayer de prévenir ces caractères d'entrer dans vos URL. Encodez les caractères s'ils sont générés par votre code, ou bien dans le fichier config/umbracoSettings.config il y a une section où vous pouvez spécifier quels caractères à exclure du chemin créé par Umbraco à partir du titre de la page. J'ai presque toujours ajouter des caractères supplémentaires aux valeurs par défaut. Cela garantit que lorsque vous publiez une page, tous les caractères non valides sont supprimés du chemin d'accès URL.

+0

Le problème est que je ne peux pas contrôler ce que les utilisateurs tapent sur leurs navigateurs;) La solution que j'ai trouvé était d'utiliser le Global.asax.cs avec la méthode Application_Error, qui déclenche quand le chemin a des caractères illégaux. – jbartolome

Questions connexes