You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 2.0环境下无法使用Google Vision C# API,如何通过Web请求调用?

嘿,我来帮你把这个.NET 2.0环境下调用Google Vision API的Web请求代码补全并理顺——毕竟老框架确实得用点“复古”的写法😉

完整实现:用HttpWebRequest调用Google Vision API

你已经有了请求初始化的基础代码,接下来只需要补全请求体构造、请求发送和响应处理这几个关键步骤,下面是适配.NET 2.0的完整代码:

1. 先定义请求/响应的实体类(适配.NET 2.0)

因为.NET 2.0不支持dynamic,所以咱们得先定义和Google Vision API格式匹配的实体类,方便序列化和反序列化JSON:

// 顶层请求类
public class VisionApiRequest
{
    public List<AnnotateImageRequest> requests { get; set; }
}

// 单张图片的标注请求
public class AnnotateImageRequest
{
    public ImageData image { get; set; }
    public List<Feature> features { get; set; }
}

// 图片数据(用Base64编码)
public class ImageData
{
    public string content { get; set; }
}

// 要调用的API功能(比如OCR、标签检测)
public class Feature
{
    public string type { get; set; } // 可选值:TEXT_DETECTION, LABEL_DETECTION等
    public int maxResults { get; set; }
}

// 响应实体类(可选,用来解析返回结果)
public class VisionApiResponse
{
    public List<AnnotateImageResponse> responses { get; set; }
}

public class AnnotateImageResponse
{
    public List<TextAnnotation> textAnnotations { get; set; }
}

public class TextAnnotation
{
    public string description { get; set; }
}

2. 补全你的Web请求代码

接着你写的那段代码,把剩下的逻辑补全:

string apiKey = "XXXXXXXXXXX"; // 替换成你的Google Cloud API密钥
string webAddr = string.Format("https://vision.googleapis.com/v1/images:annotate?key={0}", apiKey);

// 初始化请求(你已经写的部分)
var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
httpWebRequest.ContentType = "application/json; charset=utf-8";
httpWebRequest.Method = "POST";
httpWebRequest.Timeout = 10000; // 设置10秒超时,按需调整

// --- 新增部分:准备请求体 ---
// 1. 把本地图片转成Base64编码
string imageFilePath = @"C:\path\to\your\image.jpg"; // 替换成你的图片路径
byte[] imageBytes = File.ReadAllBytes(imageFilePath);
string base64Image = Convert.ToBase64String(imageBytes);

// 2. 构造请求对象(这里以OCR文本检测为例)
var visionRequest = new VisionApiRequest
{
    requests = new List<AnnotateImageRequest>
    {
        new AnnotateImageRequest
        {
            image = new ImageData { content = base64Image },
            features = new List<Feature>
            {
                new Feature { type = "TEXT_DETECTION", maxResults = 1 }
            }
        }
    }
};

// 3. 将请求对象序列化为JSON(.NET 2.0用JavaScriptSerializer,需要引用System.Web.Extensions)
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
string jsonBody = serializer.Serialize(visionRequest);

// --- 完成请求发送 ---
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
    streamWriter.Write(jsonBody);
    streamWriter.Flush();
}

// --- 处理API响应 ---
try
{
    using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse())
    using (var streamReader = new StreamReader(httpWebResponse.GetResponseStream()))
    {
        string responseJson = streamReader.ReadToEnd();
        // 解析响应为实体类(如果需要结构化数据)
        var visionResponse = serializer.Deserialize<VisionApiResponse>(responseJson);
        if (visionResponse.responses.Count > 0 && visionResponse.responses[0].textAnnotations != null)
        {
            Console.WriteLine("识别到的文本:");
            Console.WriteLine(visionResponse.responses[0].textAnnotations[0].description);
        }
        // 直接打印原始响应也可以
        // Console.WriteLine(responseJson);
    }
}
catch (WebException ex)
{
    // 捕获并处理请求错误(比如密钥无效、图片格式不对、API未启用等)
    using (var errorResponse = (HttpWebResponse)ex.Response)
    using (var streamReader = new StreamReader(errorResponse.GetResponseStream()))
    {
        string errorDetails = streamReader.ReadToEnd();
        Console.WriteLine("请求出错了:");
        Console.WriteLine(errorDetails);
    }
}

3. 适配.NET 2.0的关键注意事项

  • JSON序列化依赖:JavaScriptSerializer需要引用System.Web.Extensions程序集,如果你的项目没加,右键项目→添加引用→找到这个程序集就行。如果没法引用,也可以用Newtonsoft.Json的**.NET 2.0兼容版本**(比如NuGet上的6.0.8版本)来序列化/反序列化。
  • API权限检查:确保你的Google Cloud API密钥已经启用了Google Vision API,并且没有设置错误的调用限制(比如IP限制)。
  • Base64编码规范:Convert.ToBase64String默认不会生成换行符,符合Google API的要求,不用额外处理。
  • 异常处理:一定要捕获WebException,因为API返回错误时会带详细的JSON错误信息,通过ex.Response能拿到这些信息,方便排查问题。

内容的提问来源于stack exchange,提问作者Enzo B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:48:30