1

我有一个 Flurl 实现已经用于多部分帖子(json 加文件附件)。我需要为 Put 添加一个以相同方式工作的扩展。到目前为止,我未能复制一个。

我的邮政编码...

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

我将如何构建一个类似的“.PutMultipartAsync”方法来代替它?

4

2 回答 2

2

你所做的应该对一次性工作很有帮助。如果你想要让它变得非常健壮,让它感觉像一流的 Flurl 功能,你可以遵循Flurl.Http 可扩展性模式并添加这些扩展方法:

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 这些是在实现之后直接建模的。

于 2018-09-27T20:32:03.890 回答
2

知道了。

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

简单的。

于 2018-09-27T19:07:15.893 回答