我在本地运行的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\"}"
导致这种逃逸的原因是什么?如何摆脱它?
答案 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;