2 votes

Codage en pourcentage dans l'url WebRequest Erreur 404 Service RESTful

J'essaie de faire un simple service de repos WEB. Mon code est basé sur cet article : http://www.progware.org/Blog/post/A-simple-REST-service-in-C.aspx Je l'ai modifié un peu, pour que mon service puisse recevoir plusieurs paramètres. Voici mes modifications :

 public string GetClientNameById(string LS, string Owner, string info)
{
 .....
 return System.IO.File.ReadAllText(XMLFileName, Encoding.GetEncoding(1251));
}
[ServiceContract(Name = "RESTServices")]
    public interface IRESTServices
    {
        [OperationContract]
        [WebGet(UriTemplate = Routing.GetEPDRoute, BodyStyle = WebMessageBodyStyle.Bare)]
        string GetClientNameById(string Id,string LS,string tmp);
    }
public static class Routing
    {
        public const string GetEPDRoute = "/EPD/{id}+{LS}+{tmp}";
    }

Cela fonctionne bien avec des symboles anglais, mais j'ai besoin d'utiliser des symboles cyrilliques. Si j'utilise des symboles cyrilliques dans l'url, il renvoie une erreur 404. J'ai essayé d'utiliser le codage en pourcentage, mais le résultat est le même. Voici mon code client :

string url = "http://localhost:4385/Service.svc/EPD/995118466+" + System.Uri.EscapeDataString("") + "+434";
            WebRequest req = WebRequest.Create(url);
            using (HttpWebResponse resp = req.GetResponse() as HttpWebResponse)
            {
                StreamReader reader = new StreamReader(resp.GetResponseStream());
                label1.Text = reader.ReadToEnd();
            } 

Avez-vous une idée de la façon de résoudre ce problème ?

UPDATE : J'ai trouvé une solution - il suffit de remplacer les symboles non anglais par des codes numériques, mais j'aimerais trouver une solution plus élégante.

0voto

m4ngl3r Points 532
<globalization
      requestEncoding="utf-8"
      responseEncoding="utf-8"
      responseHeaderEncoding="utf-8"
      fileEncoding="utf-8"
      resourceProviderFactoryType=""
      enableBestFitResponseEncoding="true"/>

ajouter les paramètres de base dans la balise de globalisation web.config

alors utilisez quelque chose comme ceci

//UTF-8
HttpUtility.UrlDecode(parameter, System.Text.Encoding.UTF8)
//UTF-16
HttpUtility.UrlDecode(parameter, System.Text.Encoding.Unicode)
//UTF-32
HttpUtility.UrlDecode(parameter, System.Text.Encoding.UTF32)

J'espère que cela vous aidera

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X