c# - HttpContent 错误请求 {"error":{"message":"强制参数丢失","error_key":null}}
问题描述
我正在尝试使用 HttpClient 做一个简单的 POST,但我遇到了一些 HttpRequestMessage.Content
. \n
简而言之,如果我在没有 的情况下对所需参数之一进行硬编码,escape character
例如:
string value = "lorem ipsum lorem ipsum lorem ipsum lorem ipsum";
request.Content = new StringContent("{\"requiredParameter\":\""+ value +"\}");
一切正常。
但是,如果我按如下方式连接字符串:
string value = "\norem ipsum \n" +
"lorem ipsum \n" +
"lorem ipsum\n";
or even
//string value = "\nlorem ipsum lorem ipsum lorem ipsum lorem ipsum";
request.Content = new StringContent("{\"requiredParameter\":\""+ value +"\}");
它没有,我收到一个错误的请求:
Status code: BadRequest
{"error":{"message":"Mandatory parameter missed","error_key":null}}
已经试过了
System.Text.Json.JsonSerializer.Serialize
var options = new JsonSerializerOptions
{
WriteIndented = true,
};
string json = System.Text.Json.JsonSerializer.Serialize(value, options);
StringBuilder因为它更适合广泛的字符串操作。
string value1 = "\nlorem ipsum \n";
string value2 = "lorem ipsum \n";
string value3 = "lorem ipsum\n";
stringBuilder.Append(value1);
stringBuilder.Append(value2);
stringBuilder.Append(value3);
request.Content = new StringContent("{\"requiredParameter\":\""+ stringBuilder.toString() +"\}");
并且,Encoding.UTF8,“应用程序/json”
request.Content = new StringContent("{\"requiredParameter\":\""+ value +"\", Encoding.UTF8, "application/json");
没用。
一个最小的复制:
static async Task<string> postAsync(Uri uri, string postContent)
{
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://www.url.com/"))
{
request.Headers.TryAddWithoutValidation("authority", "www.url.com");
request.Headers.TryAddWithoutValidation("accept", "application/json, text/plain, */*");
request.Headers.TryAddWithoutValidation("x-oauth2-required", "true");
request.Content = new StringContent("{\"requiredParameter\":\""+ value +"\}");
return await response.Content.ReadAsStringAsync();
}
}
}
static async Task Main(string[] args)
{
Uri uri = new Uri("www.uri.com");
var postContent = GenerateDynamicStringContent(List<string> params);
await PostAsync(uri, postContent);
}
我在这里想念什么?
解决方案
不同之处在于,在第二个和第三个选项中,每个lorem ipsum
.
concatenate
如果您在字符串(每行的末尾)中给出空格并且类似地在stringBuilder
那么它们将与第一个相同。
与连接
string value = "lorem ipsum " +
"lorem ipsum " +
"lorem ipsum ";
使用 StringBuilder
string value1 = "lorem ipsum ";
string value2 = "lorem ipsum ";
string value3 = "lorem ipsum";
stringBuilder.Append(value1);
stringBuilder.Append(value2);
stringBuilder.Append(value3);
推荐阅读
- c# - 将树视图中的节点设置为以编程方式检查会返回 System.StackOverflowException
- java - 模拟的 jdbcTemplate 没有返回所需的值
- mysql - MySQL CPU 时间是否意味着这么长?
- javascript - 正则表达式 - 替换最后出现的字符
- macos - 我可以使用智能文件夹的查找器项目计数作为触发器吗?
- salesforce - Salesforce REST API - 识别重复错误的来源
- angular - Ngb Typehead 结果与部分
- python - 当我尝试使用 plyfile API 访问 .ply 文件时,为什么会出现 ValueError:两个具有相同名称的属性?
- visual-studio - .NetCore 运行时标识符参数被忽略,MSBuild,Team City
- twitter - 确定状态/过滤端点的 Twitter API 速率限制