You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#+RestSharp调用Synology File Station API上传文件返回401错误如何解决

问题解决步骤

401错误为授权验证失败,结合你提供的代码,问题由以下几个可修复的错误导致:

  • 错误1:手动指定multipart请求头
    你开启了AlwaysMultipartFormData后,RestSharp会自动生成合法的Content-Type(含随机boundary)和Content-Length头,你手动覆盖的boundary和实际请求使用的边界值不一致,会导致群晖服务端无法正常解析表单参数,无法读取到_sid字段,最终返回401。直接删除以下两行代码即可:
request.AddHeader("Content-Type", $"multipart/form-data; boundary={Guid.NewGuid()}");
request.AddHeader("Content-Length", $"{data.Length}");
  • 错误2:参数重复提交
    你同时将api/method/version三个参数同时添加到了查询参数和表单参数中,重复参数会导致群晖API参数校验失败。建议保留表单参数,将对应查询参数的添加代码删除,同时将_sid也放到表单参数中提交(部分群晖版本的上传接口不支持查询参数传递sid):
    删除以下代码:
request.AddQueryParameter("api", "SYNO.FileStation.Upload");
request.AddQueryParameter("method", "upload");
request.AddQueryParameter("version", "2");
request.AddQueryParameter("_sid", $"{SynSettings.Sid}");

然后在表单参数区域补充sid的提交:

request.AddParameter("_sid", SynSettings.Sid, ParameterType.GetOrPost);
  • 错误3:权限校验
    确认你获取SID的账号具备/ActiveBackupforBusiness共享文件夹的写入权限,且SID未过期(可先调用SYNO.FileStation.Info.getinfo接口验证SID有效性)。

修改后的可运行代码示例

private const string url_auth = "/webapi/entry.cgi";

public Upload()
{
    byte[] data = File.ReadAllBytes(@"/Users/XXXXXX/Downloads/file.csv");

    var client = new RestClient(SynSettings.DSM);
    var request = new RestRequest(url_auth);
    request.AlwaysMultipartFormData = true;
    request.Method = Method.POST;

    // 表单参数提交
    request.AddParameter("api", "SYNO.FileStation.Upload", ParameterType.GetOrPost);
    request.AddParameter("version", "2", ParameterType.GetOrPost);
    request.AddParameter("method", "upload", ParameterType.GetOrPost);
    request.AddParameter("_sid", SynSettings.Sid, ParameterType.GetOrPost);
    request.AddParameter("path", "/ActiveBackupforBusiness", ParameterType.GetOrPost);
    request.AddParameter("create_parents", "false", ParameterType.GetOrPost);

    request.AddFileBytes("file", data, "file.csv", "application/octet-stream");

    Console.WriteLine(client.BuildUri(request));
    var queryResult = client.Execute(request);
    Console.WriteLine(queryResult.Content);
}

内容的提问来源于stack exchange,提问作者pixel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:15:08