使用HttpClient异步方法返回错误格式化的字符串

时间:2014-03-05 12:16:30

标签: c# .net json asp.net-web-api async-await

我不确定这个错误是否仅在使用ReadAsStringAsync()时发生,但我非常确定我没有非异步的问题。

WebAPI Result

Client Result

问题是返回的字符串应该是“10”而不是“//”\“10 \”“(JSON格式化)

我该如何解决这个问题? 服务器端代码来自RESTful WebAPI,客户端代码来自与WebAPI通信的客户端。

编辑#1: 你们这些人可能会误解我。 我知道我通过使用.Result()扩展来获取我想要的字符串。 但我的问题是如何通过使用等待函数(没有.Result())来获得相同的结果?

编辑#2: 请评论downvote。我不明白我的问题是什么问题?如果这是一个愚蠢的问题,那么请告诉我我不理解

1 个答案:

答案 0 :(得分:4)

这里没有问题。服务器将字符串值“10”作为响应的原始 HTTP主体返回给客户端,内容类型为application/json。在反序列化之前,您在returnValue中看到的值是原始值。

反序列化HTTP正文后,您将获得原始字符串。

以下控制台应用程序代码段返回“\”10 \“”作为原始值,但返回“10”作为反序列化值:

var client = new HttpClient();
var s = client.GetStringAsync(@"http://localhost:7807/api/values/10").Result;
Debug.Assert(s=="\"10\"");

var s2=(string)JsonConvert.DeserializeObject(s);
Debug.Assert(s2 == "10");

您也可以使用async\await,例如:

static async Task<string> GetDataAsync()
{
    var client = new HttpClient();
    var s = await client.GetStringAsync(@"http://localhost:7807/api/values/10");
    var s2 = (string)JsonConvert.DeserializeObject(s);
    return s2;
}