【发布时间】:2013-02-27 14:04:18
【问题描述】:
我有一个 REST 服务,它读取文件并将其转换为字节数组,然后转换为 Base64 字符串后将其发送到另一个控制台应用程序。这部分有效,但是当应用程序接收到相同的流时,它会被操纵并且不再是有效的 Base64 字符串。一些垃圾字符被引入到流中。
将流转换回字节时收到的异常是
输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或非空格 填充字符中的字符
服务中:
[WebGet(UriTemplate = "ReadFile/Convert", ResponseFormat = WebMessageFormat.Json)]
public string ExportToExcel()
{
string filetoexport = "D:\\SomeFile.xls";
byte[] data = File.ReadAllBytes(filetoexport);
var s = Convert.ToBase64String(data);
return s;
}
申请时:
var client = new RestClient("http://localhost:56877/User/");
var request = new RestRequest("ReadFile/Convert", RestSharp.Method.GET);
request.AddHeader("Accept", "application/Json");
request.AddHeader("Content-Type", "application/Json");
request.OnBeforeDeserialization = resp => {resp.ContentType = "application/Json";};
var result = client.Execute(request);
byte[] d = Convert.FromBase64String(result.Content);
【问题讨论】:
-
这可能与
Encoding有关。 -
你知道插入了什么“垃圾字符”吗?
-
更新后的代码很有帮助。现在我们需要查看您发送的字符串(即服务上的
s)和收到的内容(即result.content。您不需要发布整个字符串,只需要发布第一个错位字符(或,如果这仍然太长,一些子字符串会显示发送的内容和接收的内容)。 -
@JimMischel 是的,我注意到 '/' 被替换为 '\/'
-
@RohitVerma 对于要替换的斜线,是在原始 HTML 内容中(Fiddler 会告诉你)还是在
result.Content中?这将告诉您问题出在服务器还是客户端。