开发者社区> 问答> 正文

调用文本内容检测时报“Object reference not set to an inst...”

根据示例调用阿里云文本内容检测时在TextScanResponse response = client.GetAcsResponse(request);这个地方报“Object reference not set to an instance of an object”
代码如下:
using System;
using Newtonsoft.Json;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Http;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Green.Model.V20180509;
using System.Collections.Generic;

namespace Admin.NET.Core
{
public class AuditServiceHelper : IAuditServiceHelper, ITransient
{
private readonly HttpClient _httpClient;

    public AuditServiceHelper(IHttpClientFactory httpClient)
    {
        _httpClient = httpClient.CreateClient();
    }
    public async Task<string> GetTextAuditResult(string txt)
    {
        /**
         * 常见获取环境变量方式:
         *     获取RAM用户AccessKey ID:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID");
         *     获取RAM用户AccessKey Secret:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
         */
        var accessKeyId = App.Configuration["OSSProvider:AccessKey"];
        var accessKeySecret = App.Configuration["OSSProvider:SecretKey"];

        DefaultProfile profile = DefaultProfile.GetProfile(
                "cn-shanghai",
                accessKeyId,
                accessKeySecret);
        // 注意:此处实例化的client尽可能重复使用,提升检测性能。避免重复建立连接。
        DefaultAcsClient client = new DefaultAcsClient(profile);

        TextScanRequest request = new TextScanRequest();
        request.AcceptFormat = FormatType.JSON;
        request.ContentType = FormatType.JSON;
        request.Method = MethodType.POST;
        request.Encoding = "UTF-8";

        Dictionary<string, object> task1 = new Dictionary<string, object>();
        task1.Add("content", txt);

        Dictionary<string, object> httpBody = new Dictionary<string, object>();
        // 检测场景。文本垃圾检测请传递antispam。
        httpBody.Add("scenes", new List<string> { "antispam" });
        httpBody.Add("bizType", "default");
        httpBody.Add("tasks", new List<Dictionary<string, object>> { task1 });

        request.SetContent(System.Text.Encoding.Default.GetBytes(JsonConvert.SerializeObject(httpBody)), "utf-8", FormatType.JSON);
        try
        {
            TextScanResponse response = client.GetAcsResponse(request);
            if (response.HttpResponse.Status != 200)
            {
                Console.WriteLine("the request failed. status:{0}", response.HttpResponse.Status);
            }
            Console.WriteLine(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));

        }
        catch (Exception ex)
        {
            Console.WriteLine("Failed with error info: {0}", ex.Message);
        }
        return "成功";
    }

}

}

展开
收起
游客jg2l2l4uf2lja 2024-07-15 15:49:52 77 0
来自:阿里云安全
2 条回答
写回答
取消 提交回答
  • 这个问题通常是因为请求对象(request)或响应对象(response)的部分属性没有正确初始化导致的。请确保在调用client.GetAcsResponse(request)之前,request对象已填充了所有必需的字段,特别是文本内容。从代码看,您已经设置了一些基本参数,但请检查App.Configuration["OSSProvider:AccessKey"]和App.Configuration["OSSProvider:SecretKey"]是否正确获取了AccessKey ID和AccessKey Secret。

    如果这些都设置无误,可能是其他依赖项或配置问题。确保 Newtonsoft.Json NuGet 包已安装,并检查DefaultAcsClient实例化和TextScanRequest的构造是否正常。可参考文档链接

    2024-07-15 16:32:18
    赞同 1 展开评论 打赏
  • 这里报错的,麻烦各位看下
    image.png

    2024-07-15 16:17:31
    赞同 3 展开评论 打赏
来源圈子
更多
收录在圈子:
+ 订阅
让上云更放心,让云上更安全。
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载