c# – 使用RestSharp发送HTTP POST Multipart / form-data字段

前端之家收集整理的这篇文章主要介绍了c# – 使用RestSharp发送HTTP POST Multipart / form-data字段前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用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;
}

猜你在找的C#相关文章