JNY*_*ger 18 c# rest json multipartform-data restsharp
我在使用RestSharp时遇到问题我需要将REST API用于我正在进行的项目.我需要发出的请求分为三部分:头API密钥,要上传的文件和一堆JSON格式的数据.API要求使用表单字段名称"data"发送数据部分.由于某种原因,这会导致问题,因为它在请求正文中命名字段"data".
我的代码如下:
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);
Run Code Online (Sandbox Code Playgroud)
如您所见,我试图同时使用request.AddBody(doc)方法和request.AddParameter(name, object, type)方法.它们似乎都没有正确发送数据,因为我收到服务器的响应,说明缺少必需的参数.使用fiddler,我可以看到二进制数据,但从不使用这两种方法的JSON数据.我已经浏览了RestSharp文档,但我找不到任何允许我将特定"字段"名称指定为表单数据体的"数据"的内容,这是我认为导致我遇到的问题.我在这做错了什么?
编辑:进一步检查fiddler后,它似乎没有将我的JSON数据添加到HTTP请求的主体.但是,在上传(执行命令)之前有一个断点,我可以在参数列表(和文件列表)中看到所有序列化的内容.当用Fiddler检查时,我看到文件二进制数据,然后是多部分/表格数据边界,然后什么都没有.我认为这是我的数据应该是......
C T*_*ney 12
所以我通过解决使用AddBody方法的问题来做到这一点,该方法自动杀死多部分表单图像并且不会发送它们. 您必须使用add参数.
要解决这个问题,您可能需要在通信的两个方面做一些工作.
要从客户端发送消息,请执行以下操作:
new RestRequest("<Your URI>");
request.AddParameter("request", tokenRequest.ToJson());
request.AddFile("front", frontImage.CopyTo, "front");
request.AddFile("back", backImage.CopyTo, "back");
request.AddHeader("Content-Type", "multipart/form-data");
Run Code Online (Sandbox Code Playgroud)
在我的Web服务端,我接受json作为方法的参数并手动获取对文件流的引用:
public JsonResult MyService(StoreImageRequest request)
{
var frontImage = HttpContext.Request.Files["front"].InputStream;
var backImage = HttpContext.Request.Files["front"].InputStream;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32142 次 |
| 最近记录: |