C# WinForms应用中如何将REST API响应保存为Excel(.xlsx)文件
Excel文件下载乱码无法打开的问题解决
错误原因
- 二进制内容被字符串转换破坏:Excel是二进制格式文件,你用
response.Content获取内容时,RestSharp会将原始二进制字节转成UTF-8字符串,这个转换过程会丢失二进制信息,直接导致内容乱码。 - GET请求添加了无效请求体:GET请求规范里不需要请求体,你添加的空
text/plain请求体可能干扰接口正常返回二进制内容。 - 用文本流写入二进制文件:
StreamWriter是处理文本的工具,它会把字符串按编码转成字节写入,进一步破坏Excel的二进制结构,导致文件无法打开。
正确实现方法
修改下载方法(获取原始二进制字节)
public static byte[] DownloadFileBytes() { try { var client = new RestClient("https://www.connect2nse.com/extranet-api/member/file/download/1.0?segment=CM&folderPath=/Reports&filename=07141_AR1_Dec22.xlsx"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer eyJhbGciOweSUzI1NiJ9.eyJtZW1iZXJDZCI6IjA3MTQxIiwic3ViIjoiMDcxNDEiLCJsb2dpbklkIjoiYm5yaG8xIiwiaXNzIjoiYm5yaG8xIiwiZXhwIjoxNjc0ODA0NDE0LCJpYXQiOjE2NzQ4MDA4MTQsImp0aSI6ImEwY2U3NjNkLWY1OWUtNDY2Yy1hMmMwLTUwNGQwZDgzOTQwYiJ9.UCnkkvTTi9fZjWWak5deXgxPEqMG16FQP4Cy_u1cR0hQb-xQ4LAhbfpMtFz1WXQ4fz7ZmRhkR1i9JXY4w32lzQ"); request.AddHeader("Cookie", "HttpOnly"); // 删除GET请求中多余的请求体参数 // request.AddParameter("text/plain", "", ParameterType.RequestBody); IRestResponse response = client.Execute(request); // 返回接口返回的原始二进制字节 return response.RawBytes; } catch (Exception) { throw; } }
修改按钮点击事件(写入二进制文件)
private void btnDownload_Click(object sender, EventArgs e) { byte[] fileBytes = DownloadFileBytes(); if (fileBytes == null || fileBytes.Length == 0) { MessageBox.Show("文件下载失败"); return; } string filePath = Path.Combine(Application.StartupPath, "07141_AR1_Dec22.xlsx"); // 直接写入二进制字节,保留文件原始结构 File.WriteAllBytes(filePath, fileBytes); MessageBox.Show("文件下载完成"); }
是否需要额外DLL
不需要额外DLL,你当前使用的RestSharp已经足够处理HTTP请求和二进制内容的获取,只需调整代码逻辑即可。
内容的提问来源于stack exchange,提问作者Kumar
相关产品推荐
相关产品推荐

