【问题标题】:how to force a result prior to executing next method?如何在执行下一个方法之前强制结果?
【发布时间】:2019-02-14 21:51:21
【问题描述】:

我们如何强制执行ReadAsStringAsync(?

在我的 azure 函数中,我是 awaiting 请求的正文:

            var body = await req.Content.ReadAsStringAsync();

然后我立即使用body 进行下一个方法:

            var hasRootNode = XmlValidator.HasRootNode(body);

这是HasRootNode的定义:

public static bool HasRootNode(string xml)

在调用HasRootNode 方法之前,它似乎没有读取整个字符串。

我们如何强制执行ReadAsStringAsync(?

【问题讨论】:

  • 问题:为什么需要从请求中读取字符串?你的意思是回应吗?
  • “它似乎没有读取整个字符串......”它是。请描述问题的实际症状。

标签: c# .net asp.net-core async-await azure-functions


【解决方案1】:

ReadAsStringAsync() 正如建议的那样“吃掉数据”,内容正在作为流处理,并且由于消息格式化程序已使用数据,因此流的位置已经在末尾。

要使用 ReadAsStringAsync(),您首先需要将内容流位置重置为开头。

 XmlValidator.HasRootNode(new System.IO.StreamReader(req.Content.ReadAsStreamAsync().GetAwaiter().GetResult()).ReadToEnd());

【讨论】:

  • var body = req.Content.ReadAsStringAsync().Result;一样吗??
  • 另外一个词我们不能简单地使用.Result ??
  • 我在一个答案中给了你多个提示。永远不要使用 .Wait() 并且永远不要使用 .Result。查看有关常见 TAP 错误的教育视频。 youtube.com/watch?v=av5YNd4X3dY&t=156s
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 2018-09-23
相关资源
最近更新 更多