2017-05-13 2 views
1

Avant d'effectuer la mise à niveau vers le .NetCore le plus récent, j'ai pu exécuter HttpWebRequest, ajouter les en-têtes et le contenu Type et extraire le flux du fichier JSON de Twitch. Depuis la mise à niveau, cela ne fonctionne pas. Je reçois une exception Web chaque fois que je vais chercher le flux de réponse. Rien n'a changé avec twitch parce qu'il fonctionne toujours avec le vieux Bot. Le vieux code ci-dessous:.NETCore HttpWebRequest - Old Way ne fonctionne pas

private const string Url = "https://api.twitch.tv/kraken/streams/channelname"; 
HttpWebRequest request; 
     try 
     { 
      request = (HttpWebRequest)WebRequest.Create(Url); 
     } 

     request.Method = "Get"; 
     request.Timeout = 12000; 
     request.ContentType = "application/vnd.twitchtv.v5+json"; 
     request.Headers.Add("Client-ID", "ID"); 
     try 
     { 
      using (var s = request.GetResponse().GetResponseStream()) 
      { 
       if (s != null) 
        using (var sr = new StreamReader(s)) 
        { 

        } 
      } 
     } 

je l'ai fait quelques recherches et trouvé que je peux avoir besoin de commencer à utiliser soit un HttpClient ou HttpRequestMessage. J'ai essayé d'aller à ce sujet, mais lors de l'ajout de contenu d'en-têtes tapez le programme s'arrête et quitte. après la première ligne ici: (lors de l'utilisation HttpsRequestMessage)

request.Content.Headers.ContentType.MediaType = "application/vnd.twitchtv.v5+json"; 
request.Content.Headers.Add("Client-ID", "rbp1au0xk85ej6wac9b8s1a1amlsi5"); 

Répondre

3

Vous essayez d'ajouter un en-tête ContentType, mais ce que vous voulez vraiment est d'ajouter un en-tête Accept (votre demande est un GET et ContentType est utilisé uniquement sur demandes qui contiennent un corps, par exemple POST ou PUT).

Dans .NET Core, vous devez utiliser HttpClient, mais n'oubliez pas que pour l'utiliser correctement, vous devez tirer parti de l'utilisation de async et await.

Ici, il est un exemple:

using System.Net.Http; 
using System.Net.Http.Headers; 

private const string Url = "https://api.twitch.tv/kraken/streams/channelname"; 

public static async Task<string> GetResponseFromTwitch() 
{ 
    using(var client = new HttpClient()) 
    { 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.twitchtv.v5+json")); 
     client.DefaultRequestHeaders.Add("Client-ID", "MyId"); 

     using(var response = await client.GetAsync(Url)) 
     { 
      response.EnsureSuccessStatusCode(); 

      return await response.Content.ReadAsStringAsync(); // here we return the json response, you may parse it 
     } 
    }  
} 
+0

Merci! J'ai dû changer certaines des URL de demande de secousse mais je l'ai maintenant fonctionnant –

+0

@Federico Dipuma, vous voulez dire ceci: request = (HttpWebRequest) WebRequest.Create (Url); ne fonctionne pas sur .NetCore – Shankar