【问题标题】:Generating Multipart form data body from text for RestSharp request从文本为 RestSharp 请求生成多部分表单数据体
【发布时间】:2020-08-18 21:33:08
【问题描述】:

我正在尝试使用 RestSharp 获得基本的登录功能。我有登录用户和密码作为我需要以某种方式转换的文本,因为服务器接受请求作为多部分/表单数据,我最初的尝试是这样的:

   RestRequest request = new RestRequest(resource, Method.POST);

   request.AddParameter("login", config.Login, ParameterType.RequestBody);
   request.AddParameter("pass", config.Password, ParameterType.RequestBody);

只是发现我不能为请求正文添加两个参数,它会丢弃除第一个以外的所有参数。所以我的下一个尝试是构建 requestBody:

        MultipartFormDataContent formData = new MultipartFormDataContent();
        formData.Add(new StringContent(config.Login), "login");
        formData.Add(new StringContent(config.Password), "pass");
        request.AddBody(formData);

这也不起作用,只是返回了关闭的元素

最后我试图将它们作为 post 参数而不是 body 传递,考虑到它需要一种我猜想的形式,它似乎只是忽略了它:

        request.AddParameter("login", JsonConvert.SerializeObject(config.Login), ParameterType.GetOrPost);
        request.AddParameter("pass", JsonConvert.SerializeObject(config.Password), ParameterType.GetOrPost);

我正在寻找有关如何以某种方式将此文本转换为有效表单数据并将其发送的任何提示。使用 HTTPWebRequest 而不是 RestSharp 看起来更容易,但我确信这是可能的,这让我很困扰。

非常感谢!

【问题讨论】:

  • 我建议使用像 WireShark 或 Fiddler 这样的数据包捕获工具,并将 RestSharp 发送的原始请求与工作请求进行比较。这将准确地告诉您发送的内容。
  • 您不是以 Json 格式发送正文中的数据吗?
  • @Sh.Imran 不,我不能将数据作为 json 发送,它必须是 formdata 内容类型。
  • @Andy 我确实试过了,但没有成功,大概是因为它正在寻找多部分表单数据格式的两个字段

标签: c# rest multipartform-data dotnet-httpclient restsharp


【解决方案1】:

事实证明,RestSharp 生成的默认标头正在发送带引号的边界参数,而我的端点接收它们时不带引号,因此我需要一个较低级别的接口并最终能够为边界创建自定义标头符合我需要的 HttpWebRequest 和 MediaHeadervalue。感谢大家观看!

【讨论】:

  • request.AddHeader("Content-Type", "multipart/form-data;boundary=[你的边界]");会让你设定自己的界限
猜你喜欢
  • 2018-07-02
  • 2019-10-13
  • 2012-11-27
  • 2016-12-17
  • 2012-03-16
  • 2016-11-11
  • 2013-02-12
  • 1970-01-01
相关资源
最近更新 更多