c # — Windows.Web.Http.HttpClient.ReadAsStringAsync () приводит к возникновению COMException HRESULT E_FAIL

У меня есть следующий код C #:

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.
Есть ли способ это исправить?

Изображение за этой ссылкой показывает сбой в VS2015

2

Решение

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

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

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

‘utf8’ не поддерживается имя кодировки. Для получения информации об определении
пользовательская кодировка, см. документацию для
Метод Encoding.RegisterProvider.

Можете ли вы убедиться, что вывод на сервере в правильном формате? Возможно, попробуйте этот ответ:
Разбор UTF8 JSON-ответа от сервера

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;
}
}
}
0

По вопросам рекламы [email protected]