2016-11-04 1 views
0

Je télécharger un fichier à l'API Vimeo et les docs me donnent envie de vérifier la progression du téléchargement en envoyant une demande de vente vide avec cet en-tête:Set tête de gamme pour */* avec HttpClient

Content-Range: bytes */* 

Leur L'API répond alors avec l'en-tête de plage qui indique la quantité de fichier téléchargée. (https://developer.vimeo.com/api/upload/videos#verify-the-upload)

J'ai une boucle while qui s'exécute pendant le chargement mais je n'arrive pas à comprendre comment ajouter l'en-tête à la requête PUT. uploadClient est la même instance HttpClient avec laquelle je télécharge le fichier.

while(!requestTask.IsCompleted) 
{ 
    var progressRequest = await uploadClient.PutAsync(uploadLink.PathAndQuery, new StringContent("")); 
    var progressResult = await progressRequest.Content.ReadAsStringAsync(); 
    Console.WriteLine("I will parse progress and output here"); 
    await Task.Delay(5000); 
} 

Comment ajouter l'en-tête de plage dans le format qu'ils veulent à cette demande?

Edit:

J'ai essayé de le faire comme ci-dessous aussi, mais comment puis-je ajouter le * à la plage et il accepte seulement une longue?

while(!requestTask.IsCompleted) 
{ 
    var progressRequestMessage = new HttpRequestMessage(HttpMethod.Put, uploadLink.PathAndQuery); 
    progressRequestMessage.Headers.Range.Ranges.Add(new RangeItemHeaderValue(*, *)); 

    var progressRequest = await uploadClient.SendAsync(progressRequestMessage); 
    var progressResult = await progressRequest.Content.ReadAsStringAsync(); 
    Console.WriteLine("I will parse progress and output here"); 
    await Task.Delay(5000); 
} 

Edit:

Je pense que je dois l'ajouter comme ceci:

progressRequestMessage.Headers.Add("Range", "bytes */*"); 

Cela me donne une exception valeur invalide donc je pense qu'il peut y avoir une autre façon d'écrire bytes */* que fonctionne mais ne peut pas le comprendre.

Répondre

1

Il est vraiment facile d'ajouter l'en-tête, il suffit de l'ajouter au contenu du corps. Impossible de trouver cela documenté, mais la douleur a fonctionné.

var bodyContent = new StringContent(""); 
bodyContent.Headers.Add("Content-Range", "bytes */*"); 

var progressRequest = await uploadClient.PutAsync(uploadLink.PathAndQuery, bodyContent); 
var progressResult = await progressRequest.Content.ReadAsStringAsync();