如何解决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,“ application / 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);
,
首先,您会丢失真正不需要任何if WIN == true then
push.x = push.start.x
push.y = push.start.y
map.camX = map.start.camX
map.camY = map.start.camY
end
操作来构建JSON的信息。 love.draw()
会为您做到这一点。
请考虑以下示例。
string
JsonSerializer
输出
using System.Text.Json;
using System.Net.Http;
How to serialize and deserialize (marshal and unmarshal) JSON in .NET
更新
我搞砸了,发送的数据破坏了json结构,并在去实现过程中导致服务器故障。
然后创建数据类。它称为数据模型。上面的链接详细描述了如何执行此操作,但我将显示该示例。不要害怕阅读。我已经完全回答了您的问题,但是您没有弄清楚。
public class Program
{
private static readonly HttpClient client = new HttpClient();
public async Task Main()
{
Dictionary<string,string> values = new Dictionary<string,string>();
values.Add("lorem1","ipsum1");
values.Add("lorem2","ipsum2");
values.Add("lorem3","ipsum3");
JsonSerializerOptions options = new JsonSerializerOptions
{
WriteIndented = true // these Options are not mandatory,just for pretty json formatting for debugging purpose
};
string json = JsonSerializer.Serialize(values,options);
Console.WriteLine(json);
string result = await PostJsonAsync("https://myapi.url/api",json);
// handle result here
}
private static async Task<string> PostJsonAsync(string url,string json)
{
using HttpContent content = new StringContent(json,Encoding.UTF8,"application/json");
using HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post,url);
request.Content = content;
using HttpResponseMessage response = await client.SendAsync(request).ConfigureAwait(false);
return await response.Content.ReadAsStringAsync();
}
}
然后简单
{
"lorem1": "ipsum1","lorem2": "ipsum2","lorem3": "ipsum3"
}
使用答案中的post方法,删除多余的public class MyPostDataClass
{
[JsonPropertyName("requiredParameter")] // the attribute needed only if Property name differs from the json field name
public string RequiredParameter { get; set; }
}
设置,使用我的string postContent = GenerateDynamicStringContent(List<string> params);
MyPostDataClass postData = new MyPostDataClass();
postData.RequiredParameter = postContent;
string json = JsonSerializer.Serialize(postData);
string result = await PostJsonAsync("https://myapi.url/api",json);
构造函数。不要设置任何标题,Headers
将为您正确设置。不要为每个请求实例化StringContent
,这是一个错误,请使用上面显示的方式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。