2016-12-11 12 views
2

私はC#のコードを次ていますWindows.Web.Http.HttpClient.ReadAsStringAsync()の結果

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