Comment supprimer un slash de fin de ligne sans utiliser le module de réécriture d'IIS ?
Je suppose que je peux ajouter quelque chose à la fonction RegisterRoutes dans le fichier global.asax.cs ?
Comment supprimer un slash de fin de ligne sans utiliser le module de réécriture d'IIS ?
Je suppose que je peux ajouter quelque chose à la fonction RegisterRoutes dans le fichier global.asax.cs ?
protected void Application_BeginRequest(object sender, EventArgs e)
{
// Do Not Allow URL to end in trailing slash
string url = HttpContext.Current.Request.Url.AbsolutePath;
if (string.IsNullOrEmpty(url)) return;
string lastChar = url[url.Length-1].ToString();
if (lastChar == "/" || lastChar == "\\")
{
url = url.Substring(0, url.Length - 1);
Response.Clear();
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location", url);
Response.End();
}
}
L'utilisation d'une méthode d'extension sur le HttpContext.Current.Request
permet de réutiliser cette méthode pour d'autres problèmes similaires, comme la redirection pour éviter les URL de contenu dupliqué pour la page 1 :
public static class HttpRequestExtensions
{
public static String RemoveTrailingChars(this HttpRequest request, int charsToRemove)
{
// Reconstruct the url including any query string parameters
String url = (request.Url.Scheme + "://" + request.Url.Authority + request.Url.AbsolutePath);
return (url.Length > charsToRemove ? url.Substring(0, url.Length - charsToRemove) : url) + request.Url.Query;
}
}
Il peut ensuite être appelé en cas de besoin :
protected void Application_BeginRequest(Object sender, EventArgs e)
{
String requestedUrl = HttpContext.Current.Request.Url.AbsolutePath;
// If url ends with /1 we're a page 1, and don't need (shouldn't have) the page number
if (requestedUrl.EndsWith("/1"))
Response.RedirectPermanent(Request.RemoveTrailingChars(2));
// If url ends with / redirect to the URL without the /
if (requestedUrl.EndsWith("/") && requestedUrl.Length > 1)
Response.RedirectPermanent(Request.RemoveTrailingChars(1));
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.