2016-04-12 3 views
0

J'essaie de faire une requête web avec des données POST et de récupérer la réponse. Je l'ai pour Android, mais ça ne marche pas de la même façon pour Windows Phone et je n'arrive pas à le faire fonctionner. Je reçois actuellement des erreurs pour GetRequestStreamd et GetResponse. Je l'ai essayé avec async et await mais il renvoyait des pointeurs NULL. J'ai utilisé le code suivant dans Android:Windows Phone 8.1 webrequest POST obtenir une réponse

public static string Login(string user, string pwd) 
    { 
     WebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("myurl"); 
     httpWebRequest.Method = "POST"; 
     using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
     { 
      LoginData data = new LoginData 
      { 
       userid = user, 
       password = pwd 
      }; 
      var json = JsonConvert.SerializeObject(data); 

      streamWriter.Write(json); 
      streamWriter.Flush(); 
      streamWriter.Dispose(); 
     } 

     var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
     using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
     { 
      return streamReader.ReadToEnd(); 
     } 
    } 
+0

Qu'est-ce qui ne fonctionne pas à ce sujet? Avez-vous des exceptions? –

Répondre

0

Je l'ai fonctionne! La réponse est indiquée dans le code ci-dessous.

public static string postData; 
    public static string responseString; 

    public static async Task PostJsonRequest() 
    { 
     string AuthServiceUri = "myurl"; 
     HttpWebRequest spAuthReq = WebRequest.Create(AuthServiceUri) as HttpWebRequest; 
     spAuthReq.ContentType = "application/json"; 
     spAuthReq.Method = "POST"; 
     spAuthReq.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), spAuthReq); 
    } 

    public static void GetRequestStreamCallback(IAsyncResult callbackResult) 
    { 
     HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState; 
     Stream postStream = myRequest.EndGetRequestStream(callbackResult); 
     byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
     postStream.Write(byteArray, 0, byteArray.Length); 
     postStream.Dispose(); 
     myRequest.BeginGetResponse(new AsyncCallback(GetResponsetStreamCallback), myRequest); 
    } 

    public static void GetResponsetStreamCallback(IAsyncResult callbackResult) 
    { 
     try 
     { 
      HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState; 
      HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult); 

      Stream streamResponse = response.GetResponseStream(); 
      StreamReader reader = new StreamReader(streamResponse); 
      responseString = reader.ReadToEnd(); 
      streamResponse.Dispose(); 
      reader.Dispose(); 
      response.Dispose(); 
     } 
     catch (Exception e) 
     { 

     } 
    } 

    public static void EnterLoginValues(string user, string pwd) 
    { 
     LoginData data = new LoginData 
     { 
      userid = user, 
      password = pwd 
     }; 
     postData = JsonConvert.SerializeObject(data); 
    }