【发布时间】:2014-05-13 00:35:07
【问题描述】:
我在将 RestSharp 用于我正在处理的项目中需要使用的 REST API 时遇到问题。我需要发出的请求分为三部分:标头 API 密钥、要上传的文件和一堆 JSON 格式的数据。 API 要求使用“数据”的表单字段名称发送数据部分。由于某种原因,这会导致问题,因为它在请求正文中将字段命名为“数据”。
我的代码如下:
var request = new RestRequest(UPLOAD_DOC_URLSEGMENT, Method.POST)
{
RequestFormat = DataFormat.Json,
AlwaysMultipartFormData = true,
JsonSerializer = new RestSharpJsonDotNetSerializer(customSerializer)
};
if (doc is DocA)
request.AddParameter("data",doc as DocA,ParameterType.RequestBody);
//request.AddBody(doc as DocA);
else
request.AddParameter("data", doc as DocB,ParameterType.RequestBody);
//request.AddBody(doc as DocB);
request.AddFile("file", doc.File.FullName);
如您所见,我尝试同时使用request.AddBody(doc) 方法和request.AddParameter(name, object, type) 方法。他们似乎都没有正确发送数据,因为我收到来自服务器的响应,说缺少所需的参数。使用提琴手我可以看到二进制数据,但看不到这两种方法的 JSON 数据。我已经浏览了 RestSharp 文档,但找不到任何可以让我将特定“字段”名称指定为表单数据主体的“数据”的内容,我认为这是导致我遇到的问题的原因.我在这里做错了什么?
编辑:在使用提琴手进一步检查后,它似乎根本没有将我的 JSON 数据添加到 HTTP 请求的正文中。但是,在上传(执行命令)之前有一个断点,我可以看到参数列表(和文件列表)中的所有内容都正确序列化。使用 Fiddler 检查时,我看到文件二进制数据,然后是多部分/表单数据边界,然后什么也没有。我会假设这是我的数据应该在的地方......
【问题讨论】:
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
-
对不起,关于那个!刚刚阅读那篇文章,感谢您的编辑。
-
我也在寻找它的答案。 @JNYRanger 你找到答案了吗..?如果您有解决方案,请告诉我。提前致谢。
-
@KevalLangalia 不。我最终放弃了 RestSharp 并使用标准的 HttpWebRequest 类和 JSON.NET 创建了自己的 REST 客户端
-
对于未来的访问者,此问题已在 RestSharp 上得到修复。讨论帖:github.com/restsharp/RestSharp/issues/524
标签: c# json rest multipartform-data restsharp