【问题标题】:Relaying JSON has escaped double-quotes [duplicate]中继 JSON 已转义双引号 [重复]
【发布时间】:2018-07-03 15:00:26
【问题描述】:

我在本地运行的 VS 中创建了一个非常简单的 C# Azure 函数,为了简单起见,它封装了对第 3 方 REST API 的调用(充当代理,但不是 Azure 函数代理 )。验证提供的参数后,所有函数都会调用第 3 方 REST API,如果调用成功则直接返回结果(JSON 响应)。

HttpResponseMessage response = await _httpClient.PostAsync( requestUri, content );

if ( response.IsSuccessStatusCode )
{
    var jsonResponseBody = await response.Content.ReadAsStringAsync();
    return req.CreateResponse( HttpStatusCode.OK, jsonResponseBody, "application/json" );
}

我在 Postman 中调用 Azure 函数得到的 JSON 类似于以下内容(内部双引号是字符串转义的):

"{\"Id\":\"0\",\"FirstName\":\"firstname\",\"LastName\":\"lastname\"}"

什么可能导致这种转义发生,我该如何摆脱它?

【问题讨论】:

  • 您在检查器中看到反斜杠了吗?或者实际上是在 HTML 中接收到的数据

标签: c# json azure azure-functions


【解决方案1】:

CreateResponse 会将您提供给它的任何内容序列化为 JSON(或 XML,如果您要求的话)。如果你给它一个字符串,它会将该字符串包装成额外的"" 以使其成为有效的 JSON(或在 XML 标记中),就像在所有 HelloWorld 示例中一样。所以

req.CreateResponse(HttpStatusCode.OK, "Hello " + name)

返回 HTTP 响应 "Hello User",因为 Hello User 不是有效的 JSON。该函数并不关心您的字符串是否已经是有效的 JSON。

要按原样返回字符串内容,您需要明确要求:

var response = req.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(jsonResponseBody, Encoding.UTF8, "application/json");
return response;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-14
    • 2011-09-10
    • 2012-12-27
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 2013-03-16
    相关资源
    最近更新 更多