2011-05-31 6 views
15

J'ai besoin d'URL encode certaines périodes que je dois passer un certain chemin du document le long et il est comme çaUrl Encoder les périodes?

http://example.com/test.aspx?document=test.docx 

Alors test.docx me cause une erreur d'un caractère illégal. Donc, je dois changer pour

. --> %2E 

J'ai essayé d'utiliser Server.UrlEncode

string b = Server.UrlEncode("http://example.com/test.aspx?document=test.docx"); 

mais je reçois

"http%3a%2f%2fexample.com%2ftest.aspx%3fdocument%3dtest.docx" 

Alors dois-je utiliser comme une chaîne de remplacement et faire -il manuellement et remplacer toutes les périodes avec ce code?

+1

Etes-vous sûr que c'est le '.'? Cela ressemble à une chaîne de requête parfaitement valide pour moi. –

Répondre

13

La période il n'y a pas de problème (étant donné que% 2E ne résout pas le problème). Une période est un caractère d'URL parfaitement valide, quel que soit le problème: ce n'est pas la période. Vérifiez la trace de la pile de l'erreur en cours de lancer ou publiez les détails complets de l'erreur.

Et vous ne devriez pas encoder l'URL du chemin entier. Seul le paramètre de chaîne de requête valeur.

string b = "http://example.com/test.aspx?document=" + Server.UrlEncode("test.docx"); 

L'erreur persiste-t-elle si vous l'essayez de cette façon?

Je ne voudrais pas toucher SharePoint avec un poteau de dix pieds. Cependant, échapper à la période n'empêcherait pas forcément SharePoint de faire ses manigances. Mais je suppose que tu devrais au moins essayer.

Server.UrlEncode("test.docx").Replace(".", "%2E"); 
+1

Bien sharepoint ne l'aime pas. Je pense que dans la chaîne de requête ou quoi que ce soit en utilisant une partie du chemin de l'URL pour trouver le dossier racine et qui ne peut pas contenir de point. % 2E du test de limite semble le réparer. – chobo2

+0

J'ai rencontré un problème similaire lors de l'utilisation des pages Web ASP.NET. Exemple: http://www.cutrategamer.com/app/remove-subscription/30/myemail%40gmail.com lancerait un message d'erreur. Essaiera de remplacer la période par "% 2E". –

+1

Une chance, @ Tod1d? J'ai le même problème avec une URL ASP.NET Web API très similaire. –

13

Ceci est une question vraiment ancienne, mais j'ai couru dans cette recherche d'un problème similaire. J'ai collé un "/" sur la fin de mon URL avec des périodes en eux et il a contourné le problème.

+0

Incroyable. - Cela a fonctionné pour moi avec l'API Web. - Tout ce que je peux faire, c'est secouer la tête. DX – BrainSlugs83

+0

Juste une note pour quiconque utilisera cette réponse. Cela fonctionnera pour la plupart des cas d'utilisation, y compris celui fourni. Cela ne marche pas ** si l'URL se termine par un caractère point. –

+0

bonne solution, mais si un utilisateur recharge la page, il obtient à nouveau 404 dans Angular – Toolkit