我正在使用RestSharp作为REST API的问题,我需要使用我正在处理的项目.我需要发出的请求分为三个部分:头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)方法.他们似乎都没有正确发送数据,因为我收到来自服务器的响应,表示丢失了所需的参数.使用fiddler我可以看到二进制数据,但从来没有这两种方法的JSON数据.我已经经历了RestSharp文档,但是我找不到任何允许我为表单数据体指定一个特定“字段”名称作为“数据”的东西,这是我认为导致我遇到的问题.我在这里做错了什么?
编辑:进一步检查与fiddler似乎没有添加我的JSON数据到HTTP请求的正文.但是,在上传之前有一个断点(执行命令),我可以在参数列表(和文件列表)中看到所有序列化的内容.当用Fiddler检查时,我看到文件二进制数据,然后是一个multipart / form-data边界,然后没有.我认为这是我的数据应该是…
解决方法
所以我正在通过使用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");
在我的Web服务端,我接受json作为方法的参数,并手动获取对文件流的引用:
public JsonResult MyService(StoreImageRequest request) { var frontImage = HttpContext.Request.Files["front"].InputStream; var backImage = HttpContext.Request.Files["front"].InputStream; }