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

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

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

WebAPI Result

Client Result

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

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

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

编辑#2: 请评论否决票。我不明白我的问题有什么问题?如果这是一个愚蠢的问题,那么请告诉我我不明白的地方

最佳答案

这里没有问题。服务器将字符串值“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;
}

关于c# - 使用 HttpClient 异步方法返回格式错误的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22197515/

相关文章:

ios - 无法将保存的 JSON 数据加载到 View 中

javascript - 使用 AJAX 抓取 JSON 数据

c# - 正确制作 GameObject “attach”?

c# - Style 中的 Storyboard已完成事件?

c# - .net core 依赖注入(inject)与通用接口(interface)中断

c# - WPF 和外部 CSS 文件

c# - 在启动期间自动在引用的程序集上运行代码??这个叫什么?

c# - Entity Framework 自连接

.net - Entity Framework - 保持数据库上下文打开与不断重新创建

ruby-on-rails - rails在 View 中美化json