gpt4 book ai didi

c# - 使用 RestSharp 发送 HTTP POST 多部分/表单数据字段

转载 作者:IT王子 更新时间:2023-10-29 04:50:13 33 4
gpt4 key购买 nike

我在将 RestSharp 用于 REST API 时遇到问题,我需要将其用于我正在处理的项目。我需要发出的请求分为三个部分: header API key 、要上传的文件和一堆 JSON 格式的数据。 API 要求使用表单字段名称“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);

如您所见,我尝试同时使用 request.AddBody(doc) 方法和 request.AddParameter(name, object, type) 方法。他们似乎都没有正确发送数据,因为我收到服务器的响应,说缺少必需的参数。使用 fiddler 我可以看到二进制数据,但看不到这两种方法的 JSON 数据。我已经浏览了 RestSharp 文档,但我找不到任何允许我将特定“字段”名称指定为表单数据主体的“数据”的内容,我认为这是导致我遇到的问题的原因.我在这里做错了什么?

编辑:在进一步检查 fiddler 后,它似乎根本没有将我的 JSON 数据添加到 HTTP 请求的主体中。但是,在上传之前有一个断点(执行命令),我可以看到参数列表(和文件列表)中正确序列化的所有内容。使用 Fiddler 检查时,我看到文件二进制数据,然后是多部分/表单数据边界,然后什么也没有。我会假设这是我的数据应该在的地方......

最佳答案

所以我通过使用 AddBody 方法来解决一个问题,该方法会自动杀死多部分表单图像并且不会发送它们。 您必须改用添加参数。

要解决这个问题,您可能需要在通信双方做一些工作。

要从客户端发送消息,您需要执行以下操作:

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");

在我的网络服务端,我接受 json 作为方法的参数并手动获取对文件流的引用:

public JsonResult MyService(StoreImageRequest request)
{
var frontImage = HttpContext.Request.Files["front"].InputStream;
var backImage = HttpContext.Request.Files["front"].InputStream;
}

关于c# - 使用 RestSharp 发送 HTTP POST 多部分/表单数据字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22799392/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com