Maison >développement back-end >C++ >Comment gérer les barres obliques codées en URL dans le routage ASP.NET ?

Comment gérer les barres obliques codées en URL dans le routage ASP.NET ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-05 01:34:40767parcourir

How to Handle URL-Encoded Slashes in ASP.NET Routing?

Barre oblique codée dans l'URL

Lors de la tentative d'accès à une URL contenant une barre oblique codée (/), telle que http:// localhost:5000/Home/About/100/200, la configuration de routage par défaut peut ne pas correspondre à l'itinéraire.

Un La solution potentielle consiste à inclure un paramètre fourre-tout dans le modèle d'URL, comme illustré ci-dessous :

routes.MapRoute(
    "Default",                                                // Route name
    "{controller}/{action}/{*id}",                            // URL with parameters
    new { controller = "Home", action = "Index", id = "" });  // Parameter defaults

Cet ajustement permet de capturer toute série de segments de chemin dans le paramètre id, y compris les barres obliques. Cependant, cette approche peut ne pas convenir à tous les scénarios.

Une autre option, en particulier si la barre oblique codée fait partie d'un seul paramètre, consiste à implémenter une logique d'encodage et de décodage personnalisée. Cela peut être accompli via une classe personnalisée comme celle fournie ci-dessous :

public class UrlEncoder
{ 
    public string URLDecode(string  decode)
    {
        if (decode == null) return null;
        if (decode.StartsWith("="))
        {
            return FromBase64(decode.TrimStart('='));
        }
        else
        {
            return HttpUtility.UrlDecode( decode) ;
        }
    }

    public string UrlEncode(string encode)
    {
        if (encode == null) return null;
        string encoded = HttpUtility.PathEncode(encode);
        if (encoded.Replace("%20", "") == encode.Replace(" ", ""))
        {
            return encoded;
        }
        else
        {
            return "=" + ToBase64(encode);
        }
    }

    public string ToBase64(string encode)
    {
        Byte[] btByteArray = null;
        UTF8Encoding encoding = new UTF8Encoding();
        btByteArray = encoding.GetBytes(encode);
        string sResult = System.Convert.ToBase64String(btByteArray, 0, btByteArray.Length);
        sResult = sResult.Replace("+", "-").Replace("/", "_");
        return sResult;
    }

    public string FromBase64(string decode)
    {
        decode = decode.Replace("-", "+").Replace("_", "/");
        UTF8Encoding encoding = new UTF8Encoding();
        return encoding.GetString(Convert.FromBase64String(decode));
    }
}

Cette classe vous permet d'encoder et de décoder des chaînes de manière personnalisée, garantissant que les caractères spéciaux tels que les barres obliques sont traités correctement tout en conservant la lisibilité et convivialité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn