2012-08-30 9 views
3

웹 서버에 게시물 데이터 (json)를 보내려고합니다. 그것은 아주 기본적인 일이지만 Windows 8 api 모든 복잡해야합니다 :/마이크로 소프트 제공 한 샘플 전혀 작동하지 않습니다. http://code.msdn.microsoft.com/windowsapps/HttpClient-sample-55700664/sourcecode?fileId=50955&pathId=797575364 scenerio 5 - 서버에 보내고 있지만 보낼 수없는 것들 (어쩌면 내가 문자열을 변환 해요 때Windows 8에서 게시물 데이터 전송

  var request = (HttpWebRequest)WebRequest.Create(url); 
      request.ContentType = "application/json"; 
      request.Method = "POST"; 

      using (var requestStream = await request.GetRequestStreamAsync()) 
      { 
       var writer = new StreamWriter(requestStream); 
       writer.Write(data); 
       writer.Flush(); 
      } 

      using (var response = await request.GetResponseAsync()) 
      { 
       using (var responseStream = response.GetResponseStream()) 
       { 
        var reader = new StreamReader(responseStream); 
        var answer = reader.ReadToEnd(); 
        return answer; 
       } 
      } 

는 내가 전에 말했듯이) ... 약간의 문제가 스트리밍)

  byte[] byteArray = Encoding.Unicode.GetBytes(data); 
      MemoryStream stream = new MemoryStream(byteArray); 
      StreamContent streamContent = new StreamContent(stream); 

      HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url); 
      request.Content = streamContent; 
      request.Headers.TransferEncodingChunked = true; 
      var httpClient = new HttpClient(); 

      HttpResponseMessage response = await httpClient.SendAsync(request); 

      string responseString = await response.Content.ReadAsStringAsync(); 

하지만 또 다른 아이디어를 내놓았다이 솔루션은 작동 (하지만 ...하는이 솔루션은 큰있다 단점 - 서버 응답은 http 코드 422를 가질 수 있으며 즉시 응용 프로그램이 충돌합니다. 어떻게 두 번째 솔루션을 사용하여 HTTP 응답 코드를 확인할 수 있습니까? 사전 :

답변

0

랩 시도-catch 블록에 코드의 본체에

감사합니다 (I이도 가능한 경우가 request.GetResponseAsync에 충돌하기 때문에 확실하지 않다)과 나쁜 전화에 WebException 처리 . WebException.Status에는 요청이 실패한 이유에 대한 상태 코드가 들어 있습니다.

var request = (HttpWebRequest)WebRequest.Create(url); 
request.ContentType = "application/json"; 
request.Method = "POST"; 
try { 
// Your code 
} 
catch (WebException) 
{ //error handling 
} 
+0

답장을 보내 주셔서 감사합니다.하지만 여전히 몇 가지 문제가 있습니다. \t 잡기 (WebException이 예) { \t (ex.Status == WebExceptionStatus.UnknownError) \t \t Helper.debug가있는 경우 ("실패를 보내기"); Helper.debug (ex.Status.ToString()); } 그리고 어떻게 생각하세요? ex.Status.ToString()은 "ProtocolError"를 반환하고 WebExceptionStatus에는 해당 유형이 없습니다. oWebExceptionStatus의 항목 중 아무 것도 내 ex.Status (if 문)에 없습니다. 그 이상한 ... 메서드 .ToString : / –

관련 문제