2011-05-13 3 views
2

L'URL d'un service Web que j'ai besoin d'appeler inclut un paramètre qui inclut du texte de formulaire libre. Je ne suis pas sûr pourquoi il a été conçu de cette façon, car il est envoyé en utilisant POST et comprend de nombreux champs dans le cadre du POST. Mais, cela me cause un problème.Url pour HttpWebRequest tronqué par des caractères spéciaux

Pour certains caractères tels que le signe dièse et <>, l'URL est tronquée lorsqu'elle rencontre le caractère de problème. Je suis HTML codant le texte pour le paramètre, mais le problème demeure. Je peux voir des caractères spéciaux comme> sont codés à quelque chose comme gt ;. Je pense que le point-virgule dans la chaîne codée est en quelque sorte un problème.

Je mets un sniffer qui reçoit la requête entrante sur le serveur et je vois là que l'URL a été tronquée.

Sur le serveur, je vois quelque chose comme:

...?extraData=kjfkfjslkj 

au lieu de:

...?extraData=kjfkfjslkj#kfjkdlsfj 

Le code est quelque chose comme ceci:

using System.Web; 
    .... 
    String strExtra="kjfkfjslkj#kfjkdlsfj"; 
    strURL = strStuff + "?extraData=" + System.Web.HttpUtility.HtmlEncode(strExtra); 
    HttpWebRequest oRequest = (HttpWebRequest)WebRequest.Create(new Uri(strURL)); 
    oRequest.Method = httpMethod; 
    oRequest.ContentType = "application/atom+xml"; 
    ... 
    using (WebResponse oResponse = oRequest.GetResponse()) 
    { 
    ... 
    } 

Répondre

7

Tout après le hachage (#) le signe n'est pas envoyé au serveur. Il est utilisé par le navigateur et les scripts de la page pour indiquer un emplacement sur une page ou une autre signification. Supprimez le signe de hachage ou l'URL l'encoder (%23) pour l'envoyer au serveur.

Cette ligne:

strURL = strStuff + "?extraData=" + System.Web.HttpUtility.HtmlEncode(strExtra); 

devrait être

strURL = strStuff + "?extraData=" + Server.UrlEncode(strExtra); 

encodage html est inutile lors de l'utilisation des données dans une URL.

+1

Oui. Cela a fonctionné pour moi. La seule chose différente est que j'ai utilisé System.Web.HttpUtility.UrlEncode() – George

+0

La propriété 'Page.Server' est de type' HttpServerUtility' et les méthodes 'UrlEncode' /' UrlDecode' passent réellement l'appel à 'HttpUtility. UrlEncode'/'HttpUtility.UrlDecode', donc vous êtes bon. –

+1

System.Web.HttpUtility.UrlEncode ne se débarrasse pas du signe de hachage ... – Ted

Questions connexes