【发布时间】:2018-01-12 07:04:29
【问题描述】:
我无法弄清楚如何使用 /post-order/v2/return/{returnId}/file/upload 调用将标签正确上传到 eBay。我不断收到“远程服务器返回错误:(400)错误请求。”。
我相信这可能与图像编码有关,但我并不完全确定。我已经能够通过 POST /return/{returnId}/decide 批准退货,但上传的下一步就是问题所在。我将图像数据保存为数据库中的 base 64 字符串。我知道数据很好,因为在其他调用中,我能够将该 base 64 字符串转换为应用程序中的图像。所以图像中的数据是没有问题的。事情在http://developer.ebay.com/Devzone/post-order/post-order_v2_return-returnId_file_upload__post.html#samplesellerlabel 上,它指出图像数据应该是“文件的base64 编码二进制表示”。
那么我在使用 Convert.ToBase64String(imageBytes) 抓取图像时收到的数据是否可能不是我真正需要的?关于如何在 C# 中执行此特定调用的示例很少甚至没有,我已经尝试了很多事情。我检查了 JSON 语法,它看起来是正确的。 (我已经删除了大部分字符串,因为它太大了。)
{"fileName":"5074119065_shippingLabel.jpeg","data":"R0lGODlhCAewBIEAAAAAAP///wAAAAAAACH/C05...zR2On54kkB4nfJYrLFRAAOw==","filePurpose":"LABEL_RELATED"}
我相当确信图像数据的格式不正确,但我不确定。如果有人对此电话有任何经验,我将不胜感激。下面是我的代码,错误出现在最后一行。标头和 JSON 代码在其他 eBay 调用中没有任何问题,这也是我怀疑我的问题可能与图像数据格式有关的原因。
string url = "https://api.ebay.com/post-order/v2/return/" + returnId + "/file/upload";
var cancelOrderRequest = (HttpWebRequest)WebRequest.Create(url);
cancelOrderRequest.Headers.Add("Authorization", "TOKEN " + authToken);
cancelOrderRequest.ContentType = "application/json";
cancelOrderRequest.Accept = "application/json";
cancelOrderRequest.Headers.Add("X-EBAY-C-MARKETPLACE-ID", "EBAY_US");
cancelOrderRequest.Method = "POST";
string fileName = returnId + "_shippingLabel.jpeg";
using (var streamWriter = new StreamWriter(cancelOrderRequest.GetRequestStream()))
{
string json = "{\"fileName\":\"" + fileName + "\",\"data\":\"" + labelData + "\",\"filePurpose\":\"LABEL_RELATED" + "\"}";
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
var response = (HttpWebResponse)cancelOrderRequest.GetResponse();
【问题讨论】:
标签: c# json httpwebrequest httpwebresponse ebay-api