与 RestSharp 文档相反,request.AddFile 不接受 FileParameter 作为 AddFile 的参数。找不到任何有关如何迁移的文档。有任何想法吗?

Kri*_*aig 7 .net c# rest http restsharp

好的,这是自从我将 RestSharp 更新到当前版本后出现问题的 C# 代码:

restRequest.Files.Add((FileParameter)file); // Added cast for clarity
Run Code Online (Sandbox Code Playgroud)

根据当前的官方文档,这是正确的选择:

restRequest.AddFile((FileParameter)file);
Run Code Online (Sandbox Code Playgroud)

然而,这似乎是不正确的,因为它抛出了这个异常:

方法“AddFile”没有重载需要 1 个参数

这直接与 RestSharp 文档相矛盾。我一直无法找到任何方法来解决这个问题。我尝试了那里的重载,但 FileParameter 不再包含所需的 Writer 属性,并且我找不到任何提及该属性移动到何处的文档。

我缺少什么?

Nit*_*ant 4

restRequest.Files只读集合,因此您不能使用该属性来添加更多文件。

只读 RestSharp 集合文件

restRequest.AddFile((FileParameter)file);由于新版本的 Restsharp 中不存在重载,因此您可以像这样定义自己的扩展方法:

using RestSharp;

public static class RestRequestExtensions
{
    public static RestRequest AddFile(this RestRequest req, FileParameter f)
    {
        return req.AddFile(f.Name, GetBytes(f.GetFile()), f.FileName, f.ContentType);
    }

    private static byte[] GetBytes(Stream input)
    {
        byte[] buffer = new byte[16 * 1024];
        using (MemoryStream ms = new MemoryStream())
        {
            int read;
            while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, read);
            }
            return ms.ToArray();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

其他方式:

public static class RestRequestExtensions
{
    public static RestRequest AddFile(this RestRequest req, FileParameter f)
    {
        return req.AddFile(f.Name, ()=>f.GetFile(), f.FileName, f.ContentType);
    }
}
Run Code Online (Sandbox Code Playgroud)