RestSharp AddBody 在 JSON 参数中添加双引号
RestSharp AddBody adding double quote in JSON parameter
我正在使用 RESTSharp
调用 API
var client = new RestClient("http://demoservice.com");
var request = new RestRequest("callapi", "put");
request.RequestFormat = DataFormat.Json;
string jsonaction = "{\"tokenid\":\"x123x45\",\"userid\":\"2456\",\"ip\":\"192.168.1.20\",\"transaction\":\"6\",\"actionCode\":\"78\",\"jtoken\":\"systemtoken\"}";
request.AddBody(new { action = "SAVE", data = "savedata", token = "systemtoken", jsonaction = jsonaction });
我正在检查传入请求的调试数据。我的预期输出如下
{"action":"SAVE","data":"savedata","token":"systemtoken","jsonaction":{"tokenid":"x123x45","userid":"2456","ip":"192.168.1.20","transaction":"6","actionCode":"78","jtoken":"systemtoken"}}
但是得到
{"action":"SAVE","data":"savedata","token":"systemtoken","jsonaction":"{"tokenid":"x123x45","userid":"2456","ip":"192.168.1.20","transaction":"6","actionCode":"78","jtoken":"systemtoken"}"}
如果有人可以指导如何 post for JSON 我已经尝试过 Addbody 和 AddJsonBody 但没有任何效果。
我建议您使用 JObject
来为这样的请求创建正文,
JObject jObject = new JObject();
jObject["action"] = "SAVE";
jObject["data"] = "savedata";
jObject["token"] = "systemtoken";
jObject["jsonaction"] = JObject.Parse("{\"tokenid\":\"x123x45\",\"userid\":\"2456\",\"ip\":\"192.168.1.20\",\"transaction\":\"6\",\"actionCode\":\"78\",\"jtoken\":\"systemtoken\"}");
然后将此 jObject
传递给
request.AddBody(jObject.ToString());
或
request.AddJsonBody(jObject.ToString());
对于 JObject
你需要将 using Newtonsoft.Json.Linq;
命名空间导入你的程序,你可以在 newtonsoft.json
包中找到这个命名空间。
你甚至可以这样使用
request.AddBody(new { action = "SAVE", data = "savedata", token = "systemtoken", jsonaction = JObject.Parse(jsonaction) });
但是为完整的 json 数据创建一个 JObject 是最好的,它可以在使用字符串
创建自己的 json 数据时最大限度地减少错误和异常
输出:
You can do this using the request.AddParameter()
method:
request.Method = Method.POST;
request.AddHeader("Accept", "application/json");
request.Parameters.Clear();
request.AddParameter("application/json", data , ParameterType.RequestBody);
var response = client.Execute(request);
var content = response.Content; // raw content as string
其中数据的格式为:
data :
{
"action":"dosomething" ,
"data":"somedata" ,
"token":"sometoken",
"jsonAction": {
"tokenId": "",
...
}
希望对您有所帮助!
我可以从两个天才那里完成以下代码
jsonaction objjsonaction = new jsonaction();
objjsonaction.tokenid = "x123x45";
objjsonaction.userid = "2456";
objjsonaction.ip = "192.168.1.20";
objjsonaction.transaction = "6";
objjsonaction.actionCode = "78";
objjsonaction.jtoken = gentoken("key"); // gentoken() is external function for generating token from key
string sobjjsonaction = Newtonsoft.Json.JsonConvert.SerializeObject(objjsonaction);
sobjjsonaction = sobjjsonaction.Replace("__", "-");
JObject jObject = new JObject();
jObject["action"] = "SAVE";
jObject["data"] = getpostdata(); // a function to generate data from db
jObject["token"] = gentoken("key"); // gentoken() is external function for generating token from key
jObject["jsonaction"] = JObject.Parse(sobjjsonaction);
string sObject = Regex.Replace(jObject.ToString(), @"\s+", "");
//request.Method = Method.PUT;
request.AddHeader("Accept", "application/json");
request.Parameters.Clear();
request.AddParameter("application/json", sObject, ParameterType.RequestBody);
我正在使用 RESTSharp
调用 API var client = new RestClient("http://demoservice.com");
var request = new RestRequest("callapi", "put");
request.RequestFormat = DataFormat.Json;
string jsonaction = "{\"tokenid\":\"x123x45\",\"userid\":\"2456\",\"ip\":\"192.168.1.20\",\"transaction\":\"6\",\"actionCode\":\"78\",\"jtoken\":\"systemtoken\"}";
request.AddBody(new { action = "SAVE", data = "savedata", token = "systemtoken", jsonaction = jsonaction });
我正在检查传入请求的调试数据。我的预期输出如下
{"action":"SAVE","data":"savedata","token":"systemtoken","jsonaction":{"tokenid":"x123x45","userid":"2456","ip":"192.168.1.20","transaction":"6","actionCode":"78","jtoken":"systemtoken"}}
但是得到
{"action":"SAVE","data":"savedata","token":"systemtoken","jsonaction":"{"tokenid":"x123x45","userid":"2456","ip":"192.168.1.20","transaction":"6","actionCode":"78","jtoken":"systemtoken"}"}
如果有人可以指导如何 post for JSON 我已经尝试过 Addbody 和 AddJsonBody 但没有任何效果。
我建议您使用 JObject
来为这样的请求创建正文,
JObject jObject = new JObject();
jObject["action"] = "SAVE";
jObject["data"] = "savedata";
jObject["token"] = "systemtoken";
jObject["jsonaction"] = JObject.Parse("{\"tokenid\":\"x123x45\",\"userid\":\"2456\",\"ip\":\"192.168.1.20\",\"transaction\":\"6\",\"actionCode\":\"78\",\"jtoken\":\"systemtoken\"}");
然后将此 jObject
传递给
request.AddBody(jObject.ToString());
或
request.AddJsonBody(jObject.ToString());
对于 JObject
你需要将 using Newtonsoft.Json.Linq;
命名空间导入你的程序,你可以在 newtonsoft.json
包中找到这个命名空间。
你甚至可以这样使用
request.AddBody(new { action = "SAVE", data = "savedata", token = "systemtoken", jsonaction = JObject.Parse(jsonaction) });
但是为完整的 json 数据创建一个 JObject 是最好的,它可以在使用字符串
创建自己的 json 数据时最大限度地减少错误和异常输出:
You can do this using the
request.AddParameter()
method:
request.Method = Method.POST;
request.AddHeader("Accept", "application/json");
request.Parameters.Clear();
request.AddParameter("application/json", data , ParameterType.RequestBody);
var response = client.Execute(request);
var content = response.Content; // raw content as string
其中数据的格式为:
data :
{
"action":"dosomething" ,
"data":"somedata" ,
"token":"sometoken",
"jsonAction": {
"tokenId": "",
...
}
希望对您有所帮助!
我可以从两个天才那里完成以下代码
jsonaction objjsonaction = new jsonaction();
objjsonaction.tokenid = "x123x45";
objjsonaction.userid = "2456";
objjsonaction.ip = "192.168.1.20";
objjsonaction.transaction = "6";
objjsonaction.actionCode = "78";
objjsonaction.jtoken = gentoken("key"); // gentoken() is external function for generating token from key
string sobjjsonaction = Newtonsoft.Json.JsonConvert.SerializeObject(objjsonaction);
sobjjsonaction = sobjjsonaction.Replace("__", "-");
JObject jObject = new JObject();
jObject["action"] = "SAVE";
jObject["data"] = getpostdata(); // a function to generate data from db
jObject["token"] = gentoken("key"); // gentoken() is external function for generating token from key
jObject["jsonaction"] = JObject.Parse(sobjjsonaction);
string sObject = Regex.Replace(jObject.ToString(), @"\s+", "");
//request.Method = Method.PUT;
request.AddHeader("Accept", "application/json");
request.Parameters.Clear();
request.AddParameter("application/json", sObject, ParameterType.RequestBody);