如何从 httpclient 调用中获取内容正文?

2024-05-12

我一直在试图弄清楚如何读取 httpclient 调用的内容,但我似乎无法理解。我得到的响应状态是 200,但我不知道如何获取返回的实际 Json,这就是我所需要的!

以下是我的代码:

async Task<string> GetResponseString(string text)
{
    var httpClient = new HttpClient();

    var parameters = new Dictionary<string, string>();
    parameters["text"] = text;
    Task<HttpResponseMessage> response = 
        httpClient.PostAsync(BaseUri, new FormUrlEncodedContent(parameters));

    return await response.Result.Content.ReadAsStringAsync();
}

我只是从一个方法调用它:

Task<string> result =  GetResponseString(text);

这就是我得到的

response Id = 89, Status = RanToCompletion, Method = "{null}", Result = "StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:\r\n{\r\n Connection: keep-alive\r\n Date: Mon, 27 Oct 2014 21:56:43 GMT\r\n ETag: \"5a266b16b9dccea99d3e76bf8c1253e0\"\r\n Server: nginx/0.7.65\r\n Content-Length: 125\r\n Content-Type: application/json\r\n}" System.Threading.Tasks.Task<System.Net.Http.HttpResponseMessage>

Update:这是我根据下面 Nathan 的回复的当前代码

    async Task<string> GetResponseString(string text)
    {
        var httpClient = new HttpClient();

        var parameters = new Dictionary<string, string>();
        parameters["text"] = text;

        var response = await httpClient.PostAsync(BaseUri, new FormUrlEncodedContent(parameters));
        var contents = await response.Content.ReadAsStringAsync();

        return contents;
    }

我从这个方法中调用它......

 string AnalyzeSingle(string text)
    {
        try
        {
            Task<string> result = GetResponseString(text);
            var model = JsonConvert.DeserializeObject<SentimentJsonModel>(result.Result);

            if (Convert.ToInt16(model.pos) == 1)
            {
                _numRetries = 0;
                return "positive";
            }

            if (Convert.ToInt16(model.neg) == 1)
            {
                _numRetries = 0;
                return "negative";
            }

            if (Convert.ToInt16(model.mid) == 1)
            {
                _numRetries = 0;
                return "neutral";
            }

            return "";
        }
        catch (Exception e)
        {
            if (_numRetries > 3)
            {
                LogThis(string.Format("Exception caught [{0}] .... skipping", e.Message));
                _numRetries = 0;
                return "";
            }
            _numRetries++;
            return AnalyzeSingle(text);
        }
    }

它会永远运行,它会到达终点线var model = JsonConvert.DeserializeObject<SentimentJsonModel>(result.Result);一旦有一次,它就会继续运行,不会在另一个断点处停止。

当我暂停执行时,它说

Id = 无法计算表达式,因为当前方法的代码已优化。, Status = 无法计算表达式,因为当前方法的代码已优化。, Method = 无法计算表达式,因为当前方法的代码已优化。, Result =无法计算表达式,因为当前方法的代码已优化。

..我继续执行,但它只是永远运行。不确定是什么问题


您使用等待/异步的方式充其量是很糟糕的,并且它使得它很难遵循。你正在混合await with Task'1.Result,这只是令人困惑。然而,看起来您正在查看最终的任务结果,而不是内容。

我重写了您的函数和函数调用,这应该可以解决您的问题:

async Task<string> GetResponseString(string text)
{
    var httpClient = new HttpClient();

    var parameters = new Dictionary<string, string>();
    parameters["text"] = text;

    var response = await httpClient.PostAsync(BaseUri, new FormUrlEncodedContent(parameters));
    var contents = await response.Content.ReadAsStringAsync();

    return contents;
}

最后的函数调用:

Task<string> result = GetResponseString(text);
var finalResult = result.Result;

或者甚至更好:

var finalResult = await GetResponseString(text);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 httpclient 调用中获取内容正文? 的相关文章

随机推荐

  • ToUpperInvariant() – MSDN 的建议是否错误?

    In 在 NET Framework 中使用字符串的最佳实践 https msdn microsoft com en us library dd465121 v vs 110 aspx 字符串比较OrdinalIgnoreCase http
  • 安装特定版本的 Visual Studio 2017

    I have trouble installing a specific version of Visual Studio 2017 Microsoft released the new Update 3 Version 15 3 1 an
  • 如何降低圈复杂度?

    我正在开发一个将 RequestDTO 发送到 Web 服务的类 我需要在发送请求之前验证该请求 请求可以从 3 个不同的地方发送 并且每个 请求类型 有不同的验证规则 例如请求1必须有姓名和电话号码 请求2必须有地址等 我有一个 DTO
  • 测试项目和配置文件

    我的 Visual Studio 2008 解决方案中有这种设置 一个使用库 Lib1 需要 app config 文件中的一些配置条目 的 WCF 服务项目 WCFService 我有一个单元测试项目 MSTest 其中包含与 Lib1
  • 在Matlab中选择图像上的像素时,索引指的是什么?

    当在Matlab中查看图像的单个像素时 该索引指的是什么 X Y 指的是像素的坐标 RGB 指的是颜色 但是关于索引是什么有什么想法吗 为了澄清一下 当我在 Matlab 中查看图形并使用数据光标选择一个点时 显示的三行是 X Y 指数 R
  • 带有自定义分配器的 std::string

    所以我目前正在编写一个内存调试器 为此我需要 stl 容器对象来使用未跟踪的分配器 我的整个代码库中都散布了 std string 因此我将其键入以使用未跟踪的分配器 typedef std basic string
  • WCF 服务 - 自定义主体

    在 WCF 服务类的构造函数中 我将当前主体设置为消息头中传递的主体的主体 Thread CurrentPrincipal OperationContext Current IncomingMessageHeaders GetHeader
  • MS Access 查询:检查表单是否打开/检查参数是否需要输入

    我目前正在尝试在 MS Access 查询 使用 GUI 工具 而不是 SQL 工具 中检查特定表单是否打开 而不使用 VBA 使用以下表达式 Expr1 Formulaires Form1 Visible 如果 Form1 打开 查询工作
  • 循环浏览 Bootstrap 3 jumbotron 的背景图像

    我正在尝试获取 3 个图像作为 Bootstrap 3 jumbotron 的背景循环播放 但问题是我在大屏幕中有 3 个 div 到目前为止我尝试过的所有解决方案都要求我将大屏幕的位置更改为相对位置 将背景图像更改为绝对位置 而且因为我试
  • 开玩笑错误意外的令牌...(ES6)

    每当我在命令行中运行 jest 时 都会收到以下错误 Test suite failed to run Users
  • 使用“g++”会导致“警告:永远不会被执行”

    我继承了一个C 项目 我正在建设RHEL https en wikipedia org wiki Red Hat Enterprise Linux5 5 通过 makefile 使用 GCC 4 1 2 该项目非常庞大 数百个文件 并且总的
  • 使用 QuartzCore 为 UITextView 创建阴影 [重复]

    这个问题在这里已经有答案了 我使用创建了一个阴影QuartzCore for my UITextView使用以下代码 myTextView layer masksToBounds NO myTextView layer shadowColo
  • PDO dblib 未捕获警告

    我已经使用 realestateconz mssql bundle 和免费 TDS 成功使我的 symfony 应用程序连接到 MSSQL 数据库 我的问题是 当我尝试执行存储过程时 如果出现问题 该过程会引发异常 但 PDO 不会报告任何
  • 尽管 JPA Converter 可用,但 org.hibernate.MappingException

    我有一个自己的 Id 类型 public class Id
  • 如何在 OpenCV 中从 YUV 文件读取帧?

    如何在 OpenCV 中从 YUV 文件读取帧 我编写了一个非常简单的 python 代码来从二进制文件读取 YUV NV21 流 import cv2 import numpy as np class VideoCaptureYUV de
  • Javascript 函数指针,以参数作为函数中的参数

    不确定标题的措辞是否正确 或者是否有更好的表达方式 但我认为还可以 无论如何 到目前为止我了解以下内容 a b a b c foo 其中 foo 是在其他地方定义的函数 不接受任何参数 只会导致函数 a b 使用上述参数运行 然后可以在函数
  • 使用 Python 开发时保护 MySQL 密码?

    我正在编写一个使用本地托管的 MySQL 数据库的 Python 脚本 该程序将以源代码形式提供 这样 MySQL 密码就肉眼可见 有没有好的办法来保护这个呢 这个想法是为了防止一些顽皮的人查看源代码 直接访问 MySQL 并做一些事情 好
  • 找不到文件异常..但它就在那里

    嘿 这将是那些愚蠢的问题之一 我试图在本地系统上获取一个文件 但我不断收到FileNotFoundException thrown 请有人纠正我 if File Exists C logs hw healthways prod 2009 0
  • 如何绑定到仅检查复选框?

    我有一个复选框 我正在使用 jquery 我想在用户选中复选框时弹出一个对话框 但是 如果他们取消选中该框 则不会弹出任何内容 我怎样才能做到这一点 另外 我需要使用 jquery live 或 livequery 因为页面加载时不会显示复
  • 如何从 httpclient 调用中获取内容正文?

    我一直在试图弄清楚如何读取 httpclient 调用的内容 但我似乎无法理解 我得到的响应状态是 200 但我不知道如何获取返回的实际 Json 这就是我所需要的 以下是我的代码 async Task