Ma Carte est:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with params
new { controller = "Home", action = "Index", id = "" } // Param defaults
);
Si j'utilise l'URL http://localhost:5000/Home/About/100%2f200
il n'y a pas d'itinéraire correspondant.
- Je modifier l'URL d' http://localhost:5000/Home/About/100
puis la route est de nouveau mis en correspondance.
Est-il un moyen facile de travailler avec des paramètres qui contiennent des barres obliques? D'autres les valeurs d'échappement (espace %20
) semblent fonctionner.
EDIT:
Pour encoder en Base64 fonctionne pour moi. Il rend l'URL laid, mais c'est OK pour l'instant.
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));
}
}
EDIT1:
À la fin il s'est avéré que la meilleure façon était de sauver une jolie chaîne formatée pour chaque article que j'ai besoin de sélectionner. C'est beaucoup mieux, parce que maintenant, je ne coder les valeurs et jamais les décoder. Tous les caractères spéciaux deviennent des "-". Beaucoup de mes db-tables ont maintenant cette colonne supplémentaire "URL". Les données sont assez stables, c'est pourquoi je peux aller dans cette voie. Je peux même vérifier, si les données en "URL" est unique.
EDIT2:
Attention aussi à caractère espace. Il semble ok sur VS serveur web intégré, mais différent sur iis7 http://stackoverflow.com/questions/1651711/properly-url-encode-space-character