Удлинитель Flurl для многокомпонентного пут - PullRequest
0 голосов
/ 27 сентября 2018

У меня уже есть реализация Flurl для многочастных постов (json плюс файл-вложение).Мне нужно добавить расширение для Put, которое работает так же.Пока что мне не удалось воспроизвести один.

Мой почтовый индекс ...

resp = await url
.PostMultipartAsync(mp => mp
    .AddString("manifest", ManifestJSON)
    .AddFile("attachment", new MemoryStream(sendFile.ToArray()), sendFilename));

Как бы я создал сопоставимый метод ".PutMultipartAsync", чтобы он занял его место?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

То, что вы сделали, должно отлично подойти для одного раза.Если вы хотите быть действительно надёжным в этом отношении, чтобы это выглядело как первоклассная функциональность Flurl, вы можете воспользоваться шаблоном расширяемости и добавить следующие методы расширения:

public static class MultipartPutExtensions
{
    public static Task<HttpResponseMessage> PutMultipartAsync(this IFlurlRequest request, Action<CapturedMultipartContent> buildContent, CancellationToken cancellationToken = default(CancellationToken))
    {
        var cmc = new CapturedMultipartContent(request.Settings);
        buildContent(cmc);
        return request.SendAsync(HttpMethod.Put, cmc, cancellationToken);
    }

    public static Task<HttpResponseMessage> PutMultipartAsync(this Url url, Action<CapturedMultipartContent> buildContent, CancellationToken cancellationToken = default(CancellationToken))
    {
        return new FlurlRequest(url).PutMultipartAsync(buildContent, cancellationToken);
    }

    public static Task<HttpResponseMessage> PutMultipartAsync(this string url, Action<CapturedMultipartContent> buildContent, CancellationToken cancellationToken = default(CancellationToken))
    {
        return new FlurlRequest(url).PutMultipartAsync(buildContent, cancellationToken);
    }
}

Они моделируются напрямуюпосле PostMultipartAsync реализаций .

0 голосов
/ 27 сентября 2018

Понял.

var content = new Flurl.Http.Content.CapturedMultipartContent();
content.AddString("manifest", ManifestJSON);
content.AddFile("attachment", new MemoryStream(sendFile.ToArray()), sendFilename, "application/zip");

resp = await url
.SendAsync(System.Net.Http.HttpMethod.Put, content);

Легко.

...