2016-10-27 2 views
0

У меня проблема. У меня 2 WebApi. Webapi2 получает данные из БД и возвращает IMAGE. Здесь все нормально и работает. Если я попробую в браузере, покажите мне изображение или если я изменю массив байтов. Проблема с Webapi1, которая вызывает этот webapi2. Я всегда получаю HttpResponseMessage с false для IsSuccessStatusCode. Ошибка - 500 внутренних ошибок сервера. Я новичок, и я не знаю, что делать ... я уже судим много вещейОшибка получения HttpResponseMessage OK

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? Вероятно, что они вызывают исключение. Убедитесь, что вы не просто отбрасываете исключения с помощью try {} catch {} и гарантируете, что вы завершите метод в API с помощью try catch, который регистрирует любые исключения из файловой системы, чтобы помочь устранить неполадки. Удачи! –

+0

@MurrayFoxcroft я отредактировал сообщение! Итак, да, я использую try catch. Проблема в том, что ответ для webapi в порядке и возвращает изображение ... когда другой webapi получает это, эта проблема. Я не знаю, где эти журналы. –

+0

А, а другой WebApi не под вашим контролем? Вам нужно будет обратиться к поставщику/владельцу и попросить их проверить их журналы. 500, как правило, является необработанной ошибкой в ​​API. Если ваши данные были просто неправильными или вы вызывали их неправильно, они должны (если они были построены правильно) просто вернуть что-то в диапазоне 400 ищ, как Bad Request. Но 500 около терминала, что-то разбилось на их стороне. –

ответ

0

Ошибка происходит потому, что при передаче значения в браузере, они изменяют некоторые carachters ... Итак, вы передаете 2 значения ... вы должны использовать

на WebAPI 1

var MIRACLE = Uri.EscapeDataString(exemplo); 

И в webapi2

var MIRACLE2 = Uri.UnescapeDataString(MIRACLE) 
+0

yessss. Thats it ... вот почему, когда я пробовал просто webapi 2, работал ... Проблема в том, когда webapi обрабатывает webapi2 ... некоторые специальные символы меняются, и я получал FALSE для IsSuccessStatusCode ... Спасибо! –

0

В соответствии с вашим кодом, веб-апи 1 будет принимать только тип носителя = «приложения/JSON». Это потому, что вы добавили код ниже:

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

Так как вы удалите строку кода или изменить его на «изображение/JPEG» от «приложения/JSON».

+0

Я уже пробовал оба !! Не работает .... спасибо –

Смежные вопросы