Partage
  • Partager sur Facebook
  • Partager sur Twitter

Web Service c# application/json

application/x-www-form-urlencoded mais pas le json

Sujet résolu
    15 mai 2019 à 15:59:45

    Bonjour, 

    Tout d'abord, je préfère préciser que j'ai fais pas mal de recherche mais j'ai rien trouvé qui aidait vraiment sur mon problème :euh:

    Enfaite, je dois créer un web service, qui vas recevoir un fichier JSON et qui doit le traiter. (je fais mes test via Fiddler pour le moment)
    Dans mon code j'ai une classe USER :

    namespace WebServiceProject
    {
        public class User
        {
            public User(string json)
            { 
                JObject jObject = JObject.Parse(json);
                JToken jRessource = jObject["resource"];
                JToken jRevision = jRessource["revision"];
                JToken jFields = jRevision["fields"];
                JToken jCreated = jFields["System.CreatedBy"];
                JToken jChanged = jFields["System.ChangedBy"];
    
                WorkItemType = (string)jFields["System.WorkItemType"];
                State = (string)jFields["System.State"];
                CreatedDate = (DateTime)jFields["System.CreatedDate"];
                CreatedBy = (string)jCreated["uniqueName"];
                ChangedDate = (DateTime)jFields["System.ChangedDate"];
                ChangedBy = (string)jChanged["uniqueName"];
                Title = (string)jFields["System.Title"];
            }
    
            public string WorkItemType { get; set; }
            public string State { get; set; }
            public DateTime CreatedDate { get; set; }
            public string CreatedBy { get; set; }
            public DateTime ChangedDate { get; set; }
            public string ChangedBy { get; set; }
            public string Title { get; set; }
            public string text { get; set; }
            public string html { get; set; }
            public string markdown { get; set; }
            public object displayName { get; set; }
            public string oldValue { get; set; }
            public string newValue { get; set; }
            public string href { get; set; }
        }
    }

    et une classe Web service :

    namespace WebServiceProject
    {
        /// <summary>
        /// Description résumée de WebService1
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [ScriptService]
        [System.ComponentModel.ToolboxItem(false)]
        // Pour autoriser l'appel de ce service Web depuis un script à l'aide d'ASP.NET AJAX, supprimez les marques de commentaire de la ligne suivante. 
        // [System.Web.Script.Services.ScriptService]
    
        public class WebService1 : System.Web.Services.WebService
        {
            [WebMethod]
            [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
            public string ReadJson(string json)
            {
                Console.WriteLine(json.Length);
                User user = new User(json);
    
                return "Title : " + user.Title + ", State : " + user.State + ", Type : " + user.WorkItemType + ", Created By : " + user.CreatedBy + ", Created Date : " + user.CreatedDate + ", Changed By : " + user.ChangedBy + ", Changed Date : " + user.ChangedDate + ".";
            }
        }
    }

    avec ce code, je peux récupérer un fichier JSON mais sous "application/x-www-form-urlencoded" et le traiter, mais ca pose problème car certains fichier ont des "&" dans leur texte et sont donc interprété par le code. Je souhaiterais donc passer sous : "Content-type: application/json" (image jointe)

    Lorsque je change ci-dessous la valeur "x-www-form-urlencoded" en "json", je reçois l'erreur suivante : 

    {"Message":"Primitive JSON non valide : json.","StackTrace":" à System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\r\n à System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n à System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n à System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n à System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n à System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n à System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n à System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}

    Merci à vous d'avance,

    Max
    exemple sous Fiddler

    • Partager sur Facebook
    • Partager sur Twitter
      16 mai 2019 à 18:20:40

      "json" .

      C'est un peu court jeune homme.

      https://stackoverflow.com/questions/477816/what-is-the-correct-json-content-type

      Si c'est "application/json", c'est mieux.

      Mais la chaine envoyée est-elle du vrai JSON (non encodé), ou pas ?

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        16 mai 2019 à 21:48:49

        merci pour la réponse, mais j'ai trouvé ce qu'il me fallait, c'était bien du vrai JSON, mais c'était le fait de mettre un string en paramètre qui posait problème ! merci !
        • Partager sur Facebook
        • Partager sur Twitter

        Web Service c# application/json

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown