2015-09-28 4 views
0

Я хотел бы знать, как добавить заголовок содержимого в инструкцию flurl. Реализация onedrive требует, чтобы я добавлял заголовок типа контента в контент и пробовал любое возможное решение без везения.Как добавить заголовок содержимого в Flurl

Я вынужден использовать обычный httpclient со следующим кодом.

Public Async Function UploadFile(folder As String, filepath As String) As Task(Of Boolean) Implements ICloud.UploadFile 
     Dim data As Byte() = File.ReadAllBytes(filepath) 
     Dim uploadurl As String = "drive/items/" + folder + ":/" + Path.GetFileName(filepath) + ":/" + "content?access_token=" + Token.access_token 


     Using client As New HttpClient() 
      client.BaseAddress = New Uri(ApiUrl) 

      Dim request As HttpRequestMessage = New HttpRequestMessage(HttpMethod.Put, uploadurl) 

      request.Content = New ByteArrayContent(data) 
      request.Content.Headers.Add("Content-Type", "application/octet-stream") 
      request.Content.Headers.Add("Content-Length", data.Length) 

      Dim response = Await client.SendAsync(request) 

      Return response.IsSuccessStatusCode 
     End Using 
    End Function 

Я уже пробовал обычный метод PutJsonAsync Flurl, но не повезло. Это единственный не-flurl, оставшийся в моем коде.

Thanx заранее.

ответ

2

Настоящая проблема заключается в том, что в настоящее время нет никакой готовой поддержки для отправки потоков или байтовых массивов в Flurl. Я планирую добавить некоторые в ближайшее время, но с деталями реализации у вас уже есть возможность добавить это самостоятельно с помощью метода расширения. (Простите C#, надеюсь, вы можете перевести на 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); 
} 

Вышеуказанные работы, если у вас уже есть FlurlClient, но как docs описать это хорошая идея, чтобы иметь соответствующие string и Url расширений, которые только может делегировать указанным выше способом:

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 те прочь в статическом вспомогательном классе, и они должны работать совместно с Flurl:

await uploadurl.PutFileAsync(filepath) 
+0

Спасибо, Тодд, я попробую. –

 Смежные вопросы

  • Нет связанных вопросов^_^