json - RestSharp:使用 request.AddJsonBody() 命名参数?
问题描述
当我使用该方法时,如何命名添加到请求中的多部分/表单数据AddJsonBody()
?
我试图超越过时的AddParameter()
方法。
这是我使用该AddJsonBody()
方法的代码:
request.AddJsonBody(Metadata);
有一个重载允许我指定 Content-Type,但我只需要普通的旧的application/json
,所以我不使用它。以下是我发送的 HTTP 请求的相关部分:
POST https://redacted/redacted HTTP/1.1
Content-Type: multipart/form-data; boundary=---------369C5A1F-30CF-450D-A5B4-2DBD93676056
-----------369C5A1F-30CF-450D-A5B4-2DBD93676056
Content-Type: application/json
Content-Disposition: form-data; name="application/json"
{"Date":"2021-07-28T14:27:01.0718841","FurtherInfo":"This is a metadata test."}
-----------369C5A1F-30CF-450D-A5B4-2DBD93676056
Content-Disposition: form-data; name="file"; filename="file20210728T1427010660244Z.txt"
Content-Type: text/plain
CL7~f`lz4ULMJa;]p-q!uH(-z*4iO'SHD)KYER5SI|e{3zW7^}J,%QPyD)$\K"
[...]
-----------369C5A1F-30CF-450D-A5B4-2DBD93676056--
如您所见,添加参数的“名称”是application/json
. 我希望它是“元数据”。因此,我正在使用此代码以我想要的方式发送内容,但此代码被标记为已过时:
Parameter metadata = new Parameter("metadata", JsonConvert.SerializeObject(Metadata), "application/json", ParameterType.RequestBody);
request.AddParameter(metadata);
使用它会将 HTTP 请求更改为:
POST https://redacted/redacted HTTP/1.1
Content-Type: multipart/form-data; boundary=---------8C24DE69-C111-418A-9C29-5D9DFABA320F
-----------8C24DE69-C111-418A-9C29-5D9DFABA320F
Content-Type: application/json
Content-Disposition: form-data; name="metadata"
{
"date": "2021-07-28T14:45:01.4650889",
"furtherInfo": "This is a metadata test."
}
-----------8C24DE69-C111-418A-9C29-5D9DFABA320F
Content-Disposition: form-data; name="file"; filename="file20210728T1445014611849Z.txt"
Content-Type: text/plain
zoRC)Z:c]\<#/z_q,k
[...]
-----------8C24DE69-C111-418A-9C29-5D9DFABA320F--
具体的序列化无关紧要,只是它是有效的 JSON 并且具有 name metadata
。
有没有办法使用更新的AddJsonBody()
方法来做到这一点?是否在路线图上操纵参数名称?
解决方案
据我了解,您正在尝试发送文件?这是一个使用 RestSharp 将文件发送到 API 的示例
using (WindowsIdentity.GetCurrent().Impersonate())
{
RestClient client = new RestClient(url);
var request = new RestRequest("/api/Upload", Method.POST, DataFormat.Json);
request.AddHeader("Cache-Control", "no-cache");
request.AlwaysMultipartFormData = true;
request.UseDefaultCredentials = true;
request.AddHeader("Content-Type", "multipart/form-data");
request.AddParameter("ServiceID", ServiceID, ParameterType.QueryString);
request.AddParameter("Description", description, ParameterType.QueryString);
//get byte[] , in reallife would be a stream
byte[] fileData = File.ReadAllBytes($@"C:\1\TEST\{filename}");
request.AddFileBytes("DocumentFile", fileData, filename, "multipart/form-data");
var result = client.Execute(request).Dump();
}
推荐阅读
- javascript - 如何将脚本标签嵌入到 Angular 组件中
- javascript - 当计时器达到两位数时,localStorage 中断
- node.js - 将 NestJS 部署到 Azure DevOps:错误:找不到模块“../commands”
- java - 如何将文件和正文添加到 MockMvc?
- sql - PostgreSQL在查询中检查父级的父级
- sql-server - T-SQL 多重重复检查
- python-3.x - 我不允许在其他电脑上运行 python 可执行文件
- python - Python - 创建元组矩阵
- c# - 自定义字体在 xamrain 表单中未按预期工作
- laravel - 有没有办法避免使用 Laravel Passport 将用户重定向到 Laravel 后端登录页面?