2012-07-11 3 views
0

나는 이미지를 서버에 POST하려면 여기에서 찾은 코드 중 일부를 사용하고 있습니다. 문제는 내가해야하는 Json 응답을받지 못하고 대신 "ResponseReady"콜백에 응답을 찾을 수 없다는 것입니다. (EDIT가 :.이 코드가 완벽하게 잘 작동, 그냥 내 매개 변수였다 밝혀) 여기 POST를 사용하여 HttpWebRequest와 Json 응답 - WP7

나는 우리가 다음 간단한 POST를 할 수있는이 클래스를 사용하여 POST

public class PostSubmitter 
    { 

     public string url { get; set; } 
     public Dictionary<string, object> parameters { get; set; } 
     string boundary = "----------" + DateTime.Now.Ticks.ToString(); 
     HttpWebRequest webRequest; 

     public void Submit() 
     { 
      // Prepare web request... 
      webRequest = WebRequest.CreateHttp(url); 
      webRequest.Method = "POST"; 
      webRequest.ContentType = string.Format("multipart/form-data; boundary={0}", boundary); 
      webRequest.BeginGetRequestStream(new AsyncCallback(RequestReady), webRequest); 

     } 

     private void RequestReady(IAsyncResult asynchronousResult) 
     { 
      using (Stream postStream = webRequest.EndGetRequestStream(asynchronousResult)) 
      { 
       writeMultipartObject(postStream, parameters); 
      } 

      webRequest.BeginGetResponse(new AsyncCallback(ResponseReady), webRequest); 

     } 

     private void ResponseReady(IAsyncResult asynchronousResult) 
     { 
      try 
      { 
       using (var response = 
       (HttpWebResponse)webRequest.EndGetResponse(asynchronousResult)) 
       using (var streamResponse = response.GetResponseStream()) 
       using (var streamRead = new StreamReader(streamResponse)) 
       { 
        var responseString = streamRead.ReadToEnd(); 
        var success = response.StatusCode == HttpStatusCode.OK; 

        if (responseString != null) 
        { 
         //JObject comes from Newtonsoft.Json ddl. This is a good one if your working with json 
         JObject jsonResponse = JObject.Parse(responseString); 
         //Do stuff with json..... 
        } 
       } 
      } 
      catch (Exception e) 
      { 
       if (e.Message == "The remote server returned an error: NotFound.") 
       { 
        webRequest.Abort(); 
        Deployment.Current.Dispatcher.BeginInvoke(delegate() { MessageBox.Show("Unable to connect to server at this time, please try again later"); }); 
       } 
       else 
        Deployment.Current.Dispatcher.BeginInvoke(delegate() { MessageBox.Show("Unable to upload photo at this time, please try again later"); }); 
       return; 
      } 
     } 


     public void writeMultipartObject(Stream stream, object data) 
     { 
      using (StreamWriter writer = new StreamWriter(stream)) 
      { 
       if (data != null) 
       { 
        foreach (var entry in data as Dictionary<string, object>) 
        { 
         WriteEntry(writer, entry.Key, entry.Value); 
        } 
       } 
       writer.Write("--"); 
       writer.Write(boundary); 
       writer.WriteLine("--"); 
       writer.Flush(); 
      } 
     } 

     private void WriteEntry(StreamWriter writer, string key, object value) 
     { 
      if (value != null) 
      { 
       writer.Write("--"); 
       writer.WriteLine(boundary); 
       if (value is byte[]) 
       { 
        byte[] ba = value as byte[]; 

        writer.WriteLine(@"Content-Disposition: form-data; name=""{0}""; filename=""{1}""", key, "sentPhoto.jpg"); 
        writer.WriteLine(@"Content-Type: application/octet-stream"); 
        writer.WriteLine(@"Content-Type: image/jpeg"); 
        writer.WriteLine(@"Content-Length: " + ba.Length); 
        writer.WriteLine(); 
        writer.Flush(); 
        Stream output = writer.BaseStream; 

        output.Write(ba, 0, ba.Length); 
        output.Flush(); 
        writer.WriteLine(); 
       } 
       else 
       { 
        writer.WriteLine(@"Content-Disposition: form-data; name=""{0}""", key); 
        writer.WriteLine(); 
        writer.WriteLine(value.ToString()); 
       } 
      } 
     } 
    } 

를 만들기 위해 사용하고있는 클래스입니다 다음 코드 줄을 사용하여 서버에 :

Dictionary<string, object> postData = new Dictionary<string, object>() 
               { 
                {"file", byteArrayOfImage} 
                //You can add other parameters here 
               }; 
    PostSubmitter postToServer = new PostSubmitter() { url = getPicturePostUrl(), parameters = postData }; 
    postToServer.Submit(); 

너무 많은 질문이에 거기 밖으로 ... 당신은 ....

가 쉽게 복잡한 웹 요청을 할 수 있도록 거라고 생각 것

도움이되는 의견을 미리 보내 주시거나 질문을 주시기 바랍니다.

답변

0

물론이 코드는 실제로 완벽하게 작동합니다. 서버가 요청을 거부 할 정도로 필요한 매개 변수 중 하나가 없습니다.