2016-10-27 1 views
0

문제가 있습니다. 나는 2 WebApi를 가지고있다. webapi2는 DB에서 데이터를 가져 와서 이미지를 반환합니다. 자, 괜찮아. 브라우저에서 해보 았으면 이미지를 표시하거나 바꿀 경우 바이트 배열을 표시합니다. 이 webapi2를 호출하는 Webapi1에 문제가 있습니다. IsSuccessStatusCode에 대해 항상 HttpResponseMessage를 false로받습니다. 오류는 500 내부 서버 오류입니다. 내가 초보자이고 내가 무엇을 해야할지하지는 ... 난 이미 많은 것을 tryedHttpResponseMessage 수신 오류입니다. 확인

public async Task<HttpResponseMessage> GetFoto(string exemplo, string exemple2) 
     { 
      HttpClientHandler handler = new HttpClientHandler() 
      { 
       UseDefaultCredentials = true, 
      }; 
     using (var client = new HttpClient(handler)) 
     { 

      client.BaseAddress = new Uri("http://192.111.56.1:1762/"); 

      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

      HttpResponseMessage response = await client.GetAsync("api/Tr/Test?exemplo="+exemplo+"&pk="+pk+""); 

      if (response.IsSuccessStatusCode) 
      { 
       var data = response.Content.ReadAsByteArrayAsync().Result; 
       var stream = new MemoryStream(data); 
       response.Content = new StreamContent(stream); 
       response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 

       return response; 
      } 
      else 
      { 

       Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase); 
       return null; 
      } 


     } 
    } 
작동하고 나에게 이미지 반환

내 webapi :

//connections code that doesn´t matter.... 

      try 
      { 

       HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); 
       var stream = new MemoryStream(imgBytes); 
       result.Content = new StreamContent(stream); 
       result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 

       return result; 

      } 

      catch (Exception ex) 
      { 
       return Request.CreateResponse(HttpStatusCode.Gone); 
      } 
+1

시스템 이벤트 로그 및 응용 프로그램 로그에서 500을 유발 한 원인을 확인 했습니까? 호출 된 API가 예외를 던지고있을 가능성이 큽니다. try {} catch {}로 예외를 버리지 않고 문제 해결에 도움이되도록 파일 시스템에 예외를 기록하는 try catch를 사용하여 API에서 메소드를 래핑하는지 확인하십시오. 행운을 빕니다! –

+0

@MurrayFoxcroft 나는 포스트를 편집했다! 그래서 네, try catch를 사용하고 있습니다. 문제는 webapi에 대한 응답은 OK이며 이미지를 반환합니다 ... 다른 webapi가 이것을 받으면 문제가 있다는 것입니다. 나는이 논문의 기록이 어디에 있는지 알지 못한다. –

+0

아, 다른 WebApi가 귀하의 통제하에 있지 않습니까? 공급 업체/소유자에게 가서 로그를 확인하도록 요청해야합니다. 일반적으로 500은 API에서 처리되지 않은 오류입니다. 데이터가 올바르지 않거나 부적절하게 호출 한 경우 잘못된 요청과 같이 400 ish 범위의 데이터를 반환해야합니다. 그러나 500 명이 터미널 근처에 있으며, 무언가가 그들의 측면에서 추락했습니다. –

답변

0

오류를 당신이이 개 값을 전달하는, 브라우저에 값을 통과 할 때, 그들이 어떤 carachters을 변경하기 때문입니다 ... 그래서 ... 당신은 webapi 1

var MIRACLE = Uri.EscapeDataString(exemplo); 

을 사용해야합니다

그리고 webapi2 코드 당으로

var MIRACLE2 = Uri.UnescapeDataString(MIRACLE) 
+0

yessss. 그게 ... 그게 왜 그냥 webapi 2, 노력했다 ... 그 문제는 webapi webapi2 처리 할 때 ... 일부 특수 문자 변경 및 IsSuccessStatusCode 거짓말을 받았습니다 ... 감사! –

0

에서, 웹 API를 1 만 미디어 유형 = "응용 프로그램/JSON"을 받아 들일 것입니다. 당신이 코드 줄을 제거하거나 변경 그러니

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

"응용 프로그램/JSON"에서 "이미지/JPEG"로 : 이것은 당신이 아래의 코드를 추가 한 때문이다.

+0

나는 벌써 양쪽 다 시험해 보았다 !! 작동하지 않았다 .... 감사합니다. –