如何在 ASP.NET Core 中编码 JSON Url
How to encode JSON Url in ASP.NET Core
我想对 API 进行 post,而我用来进行 post 调用的 link 有一些 URL参数.
Link 使 post: http:///someservice/api/v1/requests?input_data=encoded_data
参数(input_data)是一个JSON,需要先编码。
当我使用此 link 对下面的 JSON 进行编码,并将编码结果添加到 URL 并使用 Postman 制作 post 时,它工作得很好。
{
"request":{
"requester":{
"email_id":"**phx@phx.com**"
},
"subject":"**subject**",
"description":"**description something**"
}
}
这是我的方法:
[HttpPost]
[Route("projectRequest")]
[Consumes("multipart/form-data")]
public IActionResult CreateConfig([FromForm] ConfigInputModel model) {
try {
var json =
"{" +
"\"request\":{ " +
"\"requester\":{ " +
"\"email_id\" : \" " + model.Requester + " \" " +
"}," +
"\"subject\":\" " + model.Subject + " \" \", " +
"\"description\":\" " + model.Description + " \" \" " +
"}" +
"}";
HttpClient httpClient = new HttpClient();
Encoding utf16le = new UnicodeEncoding(bigEndian: false, byteOrderMark: true,throwOnInvalidBytes: true);
HttpContent content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(json));
var postResponse = httpClient.PostAsync("http://someservice/api/v1/requests?input_data=" +
System.Web.HttpUtility.UrlEncode(json), content);
return Ok(postResponse.Result);
} catch (Exception e) {
return NotFound();
}
}
我的问题是如何编码 JSON 变量,因为我得到
"Unable to parse the JSON"
来自 API 的回复。我怀疑我所拥有的 JSON 字符串中的转义字符导致了它,但很长一段时间都无法弄清楚。谢谢。
我在我这边测试了你的代码,当我使用 JObject jsonObj = JObject.Parse(json);
传输你的 json 字符串时,我得到了关于 request.subject
和 request.description
的错误,
然后我发现你这个地方写错了,你把我在下面截图里标注的去掉。
而不是将 JSON 写成字符串,建议 将数据设置为 object
与 POCO class
或 anonymous
type.接下来,将其序列化为 JSON 字符串。
好处:避免JSON语法错误。
anonymous type
var json = new {
request = new {
requester = new {
email_id = model.Requester
}
},
subject = model.Subject,
description = model.Description
};
Console.WriteLine(JsonConvert.SerializeObject(json));
Output
{"request":{"requester":{"email_id":"Requester"}},"subject":"Subject","description":"Description"}
我想对 API 进行 post,而我用来进行 post 调用的 link 有一些 URL参数.
Link 使 post: http:///someservice/api/v1/requests?input_data=encoded_data
参数(input_data)是一个JSON,需要先编码。 当我使用此 link 对下面的 JSON 进行编码,并将编码结果添加到 URL 并使用 Postman 制作 post 时,它工作得很好。
{
"request":{
"requester":{
"email_id":"**phx@phx.com**"
},
"subject":"**subject**",
"description":"**description something**"
}
}
这是我的方法:
[HttpPost]
[Route("projectRequest")]
[Consumes("multipart/form-data")]
public IActionResult CreateConfig([FromForm] ConfigInputModel model) {
try {
var json =
"{" +
"\"request\":{ " +
"\"requester\":{ " +
"\"email_id\" : \" " + model.Requester + " \" " +
"}," +
"\"subject\":\" " + model.Subject + " \" \", " +
"\"description\":\" " + model.Description + " \" \" " +
"}" +
"}";
HttpClient httpClient = new HttpClient();
Encoding utf16le = new UnicodeEncoding(bigEndian: false, byteOrderMark: true,throwOnInvalidBytes: true);
HttpContent content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(json));
var postResponse = httpClient.PostAsync("http://someservice/api/v1/requests?input_data=" +
System.Web.HttpUtility.UrlEncode(json), content);
return Ok(postResponse.Result);
} catch (Exception e) {
return NotFound();
}
}
我的问题是如何编码 JSON 变量,因为我得到
"Unable to parse the JSON"
来自 API 的回复。我怀疑我所拥有的 JSON 字符串中的转义字符导致了它,但很长一段时间都无法弄清楚。谢谢。
我在我这边测试了你的代码,当我使用 JObject jsonObj = JObject.Parse(json);
传输你的 json 字符串时,我得到了关于 request.subject
和 request.description
的错误,
然后我发现你这个地方写错了,你把我在下面截图里标注的去掉。
而不是将 JSON 写成字符串,建议 将数据设置为 object
与 POCO class
或 anonymous
type.接下来,将其序列化为 JSON 字符串。
好处:避免JSON语法错误。
anonymous type
var json = new {
request = new {
requester = new {
email_id = model.Requester
}
},
subject = model.Subject,
description = model.Description
};
Console.WriteLine(JsonConvert.SerializeObject(json));
Output
{"request":{"requester":{"email_id":"Requester"}},"subject":"Subject","description":"Description"}