0

flurl-statement にコンテンツ ヘッダーを追加する方法を知りたいです。onedrive の実装では、コンテンツに content-type ヘッダーを追加する必要があり、考えられるすべての解決策を試してみましたが、うまくいきませんでした。

次のコードでは、通常の 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

私はすでに Flurl の通常の PutJsonAsync メソッドを試しましたが、うまくいきませんでした。これは、私のコードに残っている唯一の非フロール部分です。

事前にサンクス。

4

1 に答える 1

3

ここでの本当の問題は、現在、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ドキュメントに記載されているように、上記のメソッドに委任できる対応する拡張機能を用意することをお勧めしますstringUrl

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

これらを静的ヘルパー クラスに格納すると、Flurl とシームレスに連携するはずです。

await uploadurl.PutFileAsync(filepath)
于 2015-09-28T19:30:33.223 に答える