2 votes

Supprimer la barre oblique de fin de ligne - Ne pas utiliser IIS pour réécrire ASP.net

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 ?

5voto

Adam Points 665
    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();
        }
    }

0voto

Chris Points 1323

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.com

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.

Powered by:

X