2016-12-11 6 views
2

Я следующие C# код:Windows.Web.Http.HttpClient.ReadAsStringAsync() приводит к COMException HRESULT E_FAIL

Uri url = new Uri("http://lu32kap.typo3.lrz.de/mensaapp/exportDB.php?mensa_id=all"); 

HttpClient client = new HttpClient(); 
client.DefaultRequestHeaders.UserAgent.TryParseAdd("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)"); 
HttpResponseMessage response = await client.GetAsync(url); 
response.EnsureSuccessStatusCode(); 
var content = response.Content; 
if(content != null) 
{ 
    string result = await content.ReadAsStringAsync(); 
     if (result != null) 
     { 
      tblock.Text = result; 
     } 
} 

Каждый раз, когда я запускаю его, я получаю COMException "HRESULT E_FAIL". Я смог отследить его частично. Это вызвано веб-сайтом, из которого я пытаюсь получить мои данные, потому что, если я меняю его на «https://www.google.de/», он работает.

Это сбой в:

string result = await content.ReadAsStringAsync(); 

Тем не менее мне нужно, чтобы заставить ее работать с этим сайтом, потому что она возвращает, с PHP генерируется объект JSON. Есть ли способ исправить это?

The image behind this link shows the crash in VS2015

ответ

0

Я побежал этот код локально, и я в конечном итоге получить это исключение

Набор символов, представленный в ContentType недействительно. Не удается прочитать содержимое в виде строки с использованием недопустимого набора символов.

И, похоже, она возвращается UTF8

'utf8' не поддерживается имя кодировки. Информацию об определении пользовательского кодирования см. В документации для метода Encoding.RegisterProvider.

Вы можете быть уверены, что вывод на сервере находится в правильном формате? Возможно, попробуйте этот ответ: Parsing UTF8 JSON response from server

+0

Да, наконец! Благодаря!! Это была проблема с кодировкой! – COM8

0

Это была проблема с кодировкой UTF8. Мне удалось создать небольшое обходное решение. Благодаря Glitch100!

Uri url = new Uri("http://lu32kap.typo3.lrz.de/mensaapp/exportDB.php?mensa_id=all"); 

     HttpClient client = new HttpClient(); 
     client.DefaultRequestHeaders.UserAgent.TryParseAdd("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)"); 
     HttpResponseMessage response = await client.GetAsync(url); 
     response.EnsureSuccessStatusCode(); 
     IHttpContent content = response.Content; 
     if(content != null) 
     { 
      IBuffer buffer = await content.ReadAsBufferAsync(); 
      using (DataReader dataReader = DataReader.FromBuffer(buffer)) 
      { 
       string result = dataReader.ReadString(buffer.Length); 
       if (result != null) 
       { 
        tblock.Text = result; 
       } 
      } 
     }