Je voudrais vraiment, vraiment em> que de stocker une URI comme valeur de gaine dans la table de table Azure. Selon le Documentation , les tapêts ne peuvent pas contenir de caractères communément trouvés dans URIS (/, \, #,?). P>
La solution semble simple: codez simplement l'URI. Mais cela ne fonctionne pas. Pour une raison quelconque, toutes les valeurs contenant la séquence em> D'accord, alors que diriez-vous de l'encodage de base64? Non. Il produit le caractère de barre oblique occasionnelle, qui n'est pas autorisé. P>
Il y a donc une méthode d'encodage d'une chaîne (une URI) pouvant être stockée de manière fiable en tant que tapis de rangée dans une table d'azur? De préférence, mais pas nécessairement, quelque chose d'humain lisible. P>
5 Réponses :
Un couple Possibilités: P>
Je suis sûr qu'il y a d'autres idées, je serai intéressé à les entendre. p>
Off Sujet Mais connexe: Je crée des tables de manière dynamique et que le code peut vous aider si vous en avez besoin, bien que les règles de tables et de pk / rk soient assez différentes. "^ [A-ZA-Z] [A-ZA-Z0-9] {2,62} $". "
Vous pouvez peut-être l'utiliser pour inspirer votre propre solution p>
décoder une chaîne p> méthode pour encoder une chaîne p>
Remplacez tous les caractères de clé de ligne illégaux de l'URL (\, /,?) avec des caractères illégaux dans les URL (par exemple, <,>,%) P>
Cela ne fonctionne pas car certaines séquences de caractères (sans papiers) ne sont pas autorisées. Une séquence connue est% 2f.
Remplacement / avec _ Après avoir utilisé le codage de base64 devrait fonctionner. A obtenu cette suggestion de codage et décodage d'une chaîne qui peut avoir de budghes dedans p>
public static string Encode(string rawText) { return Regex.Replace(rawText, @"[/\?\:@\&=\+,\$]", delegate(Match m) { switch (m.Value) { case "/": return "{#sl}"; case "?": return "{#qm}"; case ":": return "{#cl}"; case "@": return "{#at}"; case "&": return "{#am}"; case "=": return "{#eq}"; case "+": return "{#pl}"; case ",": return "{#cm}"; case "$": return "{#dl}"; default: return m.Value; } }); } public static string Decode(string encodedText) { return Regex.Replace(encodedText, @"\{#[a-z]{2}\}", delegate(Match m) { switch (m.Value) { case "{#sl}": return "/"; case "{#qm}": return "?"; case "{#cl}": return ":"; case "{#at}": return "@"; case "{#am}": return "&"; case "{#eq}": return "="; case "{#pl}": return "+"; case "{#cm}": return ","; case "{#dl}": return "$"; default: return m.Value; } }); }
Cela permet startswith code> requêtes