要使用C#执行rest API调用,我必须使用参数序列化字典。这些参数必须作为JSON放在请求体内。
API调用是在RestSharp的帮助下完成的。并使用fiddler检查发送字符串。
_
问题是API非常挑剔,它不接受断点(反斜杠),并且它在JSON字符串的开头和结尾都不接受双引号。
所以这就是它所期待的:
request.AddBody(_jsonrequeststring);
这就是我发送的内容:
{
"ConsumerToken":"aconsumertoken",
"UserId":"email@web.com",
"PasswordSha256Base64":"apassword"
}
我能够删除\"但是当它发送该字符串时,它也会返回错误。
"{ConsumerToken:\"aconsumertoken\",UserId:\"email@web.com\",PasswordSha256Base64:\"apassword\"}"
甚至可以删除\并打开和关闭双引号?如果是这样怎么样?我似乎无法绕过它。
完整的电话:
"{ConsumerToken:aconsumertoken,UserId:email@web.com,PasswordSha256Base64:apassword}"
public static object Login(string uname, string pass, string conTok)
{
Dictionary<string, string> loginDictionary =
new Dictionary<string, string>();
loginDictionary.Add("ConsumerToken", conTok);
loginDictionary.Add("UserId", uname);
loginDictionary.Add("PasswordSha256Base64", pass);
string jsonRequestString = JsonConvert.SerializeObject(loginDictionary);
Proxy proxy = new Proxy(jsonRequestString);
return proxy.Execute();
}
答案 0 :(得分:3)
看起来你正在将正文内容添加为字符串,这意味着它将被RestSharp编码为字符串。如果可能,尝试添加对象本身并让RestSharp处理序列化等:
var obj = new {
ConsumerToken = "aconsumertoken",
UserId = "email@web.com",
PasswordSha256Base64 = "apassword"
};
request.AddBody(obj);
如果由于某种原因必须使用预序列化的JSON字符串,您应该能够这样做:
request.AddParameter("application/json", _jsonrequeststring, ParameterType.RequestBody);
[注意:我实际上没有测试过这些建议,但我认为他们应该这样做]