Encoding 如何防止RestSharp对包含结束引号的字符串进行双转义?

Encoding 如何防止RestSharp对包含结束引号的字符串进行双转义?,encoding,restsharp,Encoding,Restsharp,我正在使用RestSharp使用一个基于PHP的RESTAPI(magento)。我遇到了一个问题,我的请求.Content包含一个用反斜杠转义的字符串。像这样:“\”mystringisexpaid\”。它应该只是一个普通字符串“mystringIsNotEscaped” API没有给出双引号的任何具体处理方法。JSON响应如下所示: { "value": 1 } HTTP/1.1 200 OK Server: nginx/1.17.1 Date: Mon, 22 Jul 2019 12:

我正在使用RestSharp使用一个基于PHP的RESTAPI(magento)。我遇到了一个问题,我的
请求.Content
包含一个用反斜杠转义的字符串。像这样:
“\”mystringisexpaid\”
。它应该只是一个普通字符串
“mystringIsNotEscaped”

API没有给出双引号的任何具体处理方法。JSON响应如下所示:

{
 "value": 1
}
HTTP/1.1 200 OK
Server: nginx/1.17.1
Date: Mon, 22 Jul 2019 12:38:44 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Set-Cookie: PHPSESSID=873l8qhalaltets0tpa2s2sta1; expires=Mon, 22-Jul-2019 13:38:44 GMT; Max-Age=3600; path=/; domain=dev.myurlthatimhiding.org; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
X-Frame-Options: SAMEORIGIN
Vary: Accept-Encoding
Content-Length: 34

"mysecuretokenstringthatimnotshowing"

以下是我目前的代码:

// PART 1: Getting an Unauthorized Request Token
var request = new RestRequest("/rest/V1/integration/admin/token", Method.POST);
request.AddJsonBody(new {username = "this.adminUserName", password = "this.adminPassword"});
request.AddHeader("content-type", "application/json");

var _client = new RestClient(_url);
var _jsonSerializer = new JsonSerializer();

_client.AddDefaultHeader(_contentTypeHeaderWithUnderscore ? "Content_Type" : "Content-Type", "application/json");
_client.ClearHandlers(); // http://stackoverflow.com/questions/22229393/why-is-restsharp-addheaderaccept-application-json-to-a-list-of-item
_client.AddHandler("application/json", _jsonSerializer);

var response = _client.Execute(request);
响应。内容是双转义的

我的原始响应(使用fiddler)如下所示:

{
 "value": 1
}
HTTP/1.1 200 OK
Server: nginx/1.17.1
Date: Mon, 22 Jul 2019 12:38:44 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Set-Cookie: PHPSESSID=873l8qhalaltets0tpa2s2sta1; expires=Mon, 22-Jul-2019 13:38:44 GMT; Max-Age=3600; path=/; domain=dev.myurlthatimhiding.org; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
X-Frame-Options: SAMEORIGIN
Vary: Accept-Encoding
Content-Length: 34

"mysecuretokenstringthatimnotshowing"

如何使RestSharp不进行双重编码,或者更具体地说,如何正确处理返回的双引号?

响应是在PHP端生成的。正如您在fiddler中所看到的,双引号来自PHP端,不是由RestSharp插入的

内容类型为PHP服务生成的响应为:

Content-Type: application/json; charset=utf-8
所以应该是JSON

通常,JSON数据较长且结构化。但是只返回一个字符串也是有效的。在JSON中,字符串必须用双引号括起来

反斜杠是调试器的产物。我假设您使用的是Visual Studio。它以源代码中显示的方式显示所有字符串。在源代码中,您可以编写:

var t = "\"mysecuretokenstringthatimnotshowing\"";
因此,反斜杠既不包含在响应中,也不包含在字符串中。这只是调试器的显示

这是一种奇怪的JSON用法。但它是有效的。只需删除字符串开头和结尾的双引号,就可以了。

看起来,Execute()将内容作为字符串提供,它将使用双引号。要反序列化,您需要提供一个类型:

var response = request.Execute<string>();
var token = response.Content;
var response=request.Execute();
var-token=response.Content;