RestSharp升级后AddFile不支持FileParameter入参无迁移文档如何解决
RestSharp 高版本文件上传API迁移方案
问题原因
你碰到的报错本质是RestSharp v107+大版本重构后,官方文档未同步更新导致的API不匹配,核心变动如下:
- 旧版本直接调用
restRequest.Files.Add(FileParameter)的写法已完全废弃,当前版本Files集合为只读状态,不支持直接新增元素 - 文档标注的接收单个
FileParameter参数的AddFile重载已在正式版中移除,运行时/编译时抛出的
No overload for method 'AddFile' takes 1 arguments
是符合当前版本实际API表现的,和未更新的文档描述存在矛盾。
- 旧版
FileParameter类的Writer属性已被重构为内部访问属性,不对外暴露,不存在公开的迁移路径,不需要强行找该属性的替代。
适配写法
根据你的文件来源选择对应重载即可,完全不需要手动构造FileParameter实例再传入:
- 本地上传磁盘文件
// 参数顺序:表单字段名、文件本地全路径、文件MIME类型 restRequest.AddFile("upload_file", @"C:\local\path\to\demo.jpg", "image/jpeg");
- 上传字节数组形式的文件
byte[] fileContent = GetFileBytesFromSource(); // 参数顺序:表单字段名、文件字节数组、上传后展示的文件名、文件MIME类型 restRequest.AddFile("upload_file", fileContent, "demo.jpg", "image/jpeg");
- 上传流形式的文件
Stream fileStream = GetFileStreamFromSource(); // 参数顺序:表单字段名、返回文件流的委托、上传后展示的文件名、文件MIME类型 restRequest.AddFile("upload_file", () => fileStream, "demo.jpg", "image/jpeg");
- 如果你已经持有旧逻辑生成的
FileParameter实例,直接读取其公开属性传入对应重载即可:
restRequest.AddFile( file.Name, file.GetFileBytes, file.FileName, file.ContentType );
补充说明
上述写法适配RestSharp 107、108、109、110所有当前主流高版本,不需要额外引入兼容包,也不需要通过反射访问内部属性。
内容的提问来源于stack exchange,提问作者Kris Craig
相关产品推荐
相关产品推荐

