转发JSON已经转义双引号

时间:2018-01-24 14:17:55

标签: c# json azure azure-functions

我在本地运行的VS中创建了一个非常简单的C#Azure功能,为了简单起见,将调用包装到第三方REST API(充当代理,但不是 Azure功能代理 )。验证提供的参数后,所有函数都会调用第三方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\"}"

导致这种逃逸的原因是什么?如何摆脱它?

1 个答案:

答案 0 :(得分:2)

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;