2015-09-28 4 views
0

Je voudrais savoir comment ajouter un en-tête de contenu à une instruction flurl. L'implémentation de l'onedrive m'oblige à ajouter un en-tête de type contenu au contenu et à essayer toutes les solutions possibles sans succès.Comment ajouter un en-tête de contenu à Flurl

Je suis obligé d'utiliser le client http habituel avec le code suivant. J'ai déjà essayé la méthode régulière PutJsonAsync de Flurl, mais sans aucune chance. J'ai déjà essayé la méthode habituelle PutJsonAsync de Flurl. C'est la seule pièce non-flurl qui reste dans mon code.

Merci d'avance.

Répondre

2

Le véritable problème ici est qu'il n'existe actuellement aucun support prêt à l'emploi pour envoyer des flux ou des tableaux d'octets dans Flurl. Je prévois d'en ajouter d'autres bientôt, mais avec les détails d'implémentation que vous avez déjà, il est facile de l'ajouter vous-même avec une méthode d'extension. (Pardonnez le C#, nous espérons que vous pouvez traduire à VB.)

public static Task<HttpResponseMessage> PutFileAsync(this FlurlClient client, string filepath) 
{ 
    var data = File.ReadAllBytes(filepath); 
    var content = new ByteArrayContent(data); 
    content.Headers.Add("Content-Type", "application/octet-stream"); 
    content.Headers.Add("Content-Length", data.Length); 
    return client.SendAsync(HttpMethod.Put, content: content); 
} 

Les travaux ci-dessus si vous avez déjà un FlurlClient, mais comme le docs décrire est une bonne idée d'avoir correspondante string et Url extensions, qui peuvent seulement déléguer à la méthode ci-dessus:

public static Task<HttpResponseMessage> PutFileAsync(this Url url, string filepath) 
{ 
    return new FlurlClient(url).PutFileAsync(filepath); 
} 

public static Task<HttpResponseMessage> PutFileAsync(this string url, string filepath) 
{ 
    return new FlurlClient(url).PutFileAsync(filepath); 
} 

Tuck ceux qui étaient absents dans une classe d'aide statique et ils doivent fonctionner de façon transparente avec Flurl:

await uploadurl.PutFileAsync(filepath) 
+0

Merci Todd, je vais essayer. –