作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了使用 C# 执行 REST API 调用,我必须使用参数序列化字典。这些参数必须以 JSON 形式放置在请求正文中。
API调用是在RestSharp的帮助下完成的。并且使用 fiddler 检查发送字符串。
request.AddBody(_jsonrequeststring);
问题是 API 非常挑剔,它不接受断点(反斜杠),也不接受 JSON 字符串开头和结尾的双引号。
所以这是它的期望:
{
"ConsumerToken":"aconsumertoken",
"UserId":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dbbeb6bab2b79bacbeb9f5b8b4b6" rel="noreferrer noopener nofollow">[email protected]</a>",
"PasswordSha256Base64":"apassword"
}
这就是我要发送的内容:
"{ConsumerToken:\"aconsumertoken\",UserId:\"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a2c7cfc3cbcee2d5c7c08cc1cdcf" rel="noreferrer noopener nofollow">[email protected]</a>\",PasswordSha256Base64:\"apassword\"}"
我可以删除\",但是当它发送该字符串时,它也会返回错误。
"{ConsumerToken:aconsumertoken,UserId:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="07626a666e6b477062652964686a" rel="noreferrer noopener nofollow">[email protected]</a>,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();
}
public class Proxy
{
const string BaseUrl = "API url";
const string ActionUrl = "API action url";
string _jsonrequeststring;
public Proxy(string json)
{
_jsonrequeststring = json;
}
public Object Execute()
{
var client = new RestClient(BaseUrl);
var request = new RestRequest(ActionUrl);
request.RequestFormat = DataFormat.Json;
request.AddBody(_jsonrequeststring);
request.Method = Method.POST;
var response = client.Execute(request);
var content = response.Content;
return content;
}
}
最佳答案
看起来您正在将正文内容添加为字符串,这意味着它会被 RestSharp 编码为字符串。如果可能,尝试添加对象本身并让 RestSharp 处理序列化等:
var obj = new {
ConsumerToken = "aconsumertoken",
UserId = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="791c14181015390e1c1b571a1614" rel="noreferrer noopener nofollow">[email protected]</a>",
PasswordSha256Base64 = "apassword"
};
request.AddBody(obj);
如果由于某种原因必须使用预序列化的 JSON 字符串,您应该可以这样做:
request.AddParameter("application/json", _jsonrequeststring, ParameterType.RequestBody);
[注意:我还没有实际测试过这些建议,但我认为它们应该可以解决问题]
关于c# - 如何删除 JSON 字符串中的开始和结束双引号以及所有反斜杠 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37158346/
我是一名优秀的程序员,十分优秀!