2011-08-13 5 views
1

J'ai créé une base de données CouchDB avec des documents qui ont une barre oblique (/) dans l'ID de document. J'essaye de mettre à jour la base de données du code C#, j'ai essayé plusieurs libs de CouchDB et employant aussi la classe plain-old-HttpWebRequest mais j'échoue avec tout parce que la classe .NET Uri échappe la chaîne pass. Je dois créer un Uri comme ceci:Mise à jour du document CouchDB avec une barre de hachage dans l'ID doc du code C#

http://myserver.com/db/firstpart%2Fsecondpart 

qui sera toujours échappé par classe .NET Uri à

http://myserver.com/db/firstpart/secondpart 

Cette cause CouchDB pour traiter le contenu du document en pièce jointe du document avec ID firstpart au lieu de traiter le document en tant que contenu pour document avec id firstpart/secondpart.

Des idées?

+0

J'aime aussi utiliser les caractères slash dans mes ID de document. Tout le monde sait ce que cela signifie, c'est un personnage très significatif. Mais si vous avez des problèmes persistants, passez peut-être à un caractère différent tel que '_' ou' .' afin d'éviter complètement le problème. – JasonSmith

Répondre

0

Je me demande si vous pouvez encoder la partie elle-même, de sorte que .Net la décodera une fois, puis enverra la version correctement encodée au serveur?

Le caractère % code comme %25, essayez donc cette URL:

http://myserver.com/db/firstpart%252Fsecondpart 

Si cela fonctionne, vous pourriez peut-être améliorer le code en appelant System.Web.HttpUtility.UrlEncode.

Une meilleure solution serait de vérifier l'API pour désactiver l'échappement. Cela ressemble à un bug d'API pour moi. Si je dis le cadre one/two%2fthree alors qu'est-ce qui lui donne le droit de me deviner? Mais c'est le monde de HTTP. (J'entends que les reverse-proxies Apache httpd sont un cauchemar avec ça.)

+0

Je vais essayer, le problème est de décoder tout ce qui se passe dans la classe URI ctor et Microsoft supprimer le ctor qui acceptait un paramètre que le signal de ne pas décoder la chaîne passée en elle. Merci –

+0

Ok. Voteriez-vous pour que les autres sachent que ça ne marche pas? (Je ne me dérange pas l'impact de la réputation, ni l'impact sur ma fierté :) – JasonSmith

Questions connexes