C#调用百度AI机器翻译API实现多语言互译
本文将详细演示如何使用C#调用百度AI开放平台的机器翻译API。主要内容包括:在百度云控制台创建机器翻译应用并获取API Key和Secret Key;编写C#类库处理HTTPS POST请求;获取访问令牌(Access Token);以及构造请求参数调用通用文本翻译接口,实现从源码到运行的完整流程。
准备条件:注册百度AI平台并创建应用
在使用API之前,需要拥有百度智能云账号,并在控制台开通“机器翻译”服务以获取鉴权凭证。
第1步:注册账号并领取免费资源
- 入口:
https://login.bce.baidu.com/ - 动作:注册并登录百度智能云平台。进入“产品服务”菜单,找到“机器翻译”。
- 重要操作:在应用列表页面,点击“领取免费资源”。这一步是生成后续代码所需密钥的前提。
第2步:创建应用获取Key
- 入口:机器翻译控制台的应用列表页。
- 动作:点击“创建应用”,填写应用名称。系统会自动生成唯一的
Api Key和Secret Key。
注意:请妥善保存这两个Key,它们在代码中将用于身份验证。
开发环境:配置C#项目
推荐使用Visual Studio创建一个名为 TranslateProject 的控制台应用程序。支持 .NET Framework 和 .NET Core,由于涉及HTTP通信,需确保项目引用了相关的网络类库。
核心步骤:编写API请求与翻译代码
第1步:编写HTTP请求工具类
我们需要一个能够处理HTTPS POST请求的辅助类。百度API通常使用HTTPS协议,因此在C#中需注意安全协议设置。以下代码使用了 WebRequest 方式:
/// <summary>
/// post请求方式
/// </summary>
/// <param name="url">请求路径</param>
/// <param name="parms">传入的值,格式为:{city:"上海",city2:"重庆"}</param>
/// <param name="token"></param>
/// <param name="ContentType">内容类型,默认application/json</param>
/// <returns>返回响应结果字符串</returns>
public string HttpPost(string url, string parms, string token,string ContentType= "application/json")
{
string result = string.Empty;
try
{
// 强制使用TLS 1.2 (3072对应TLS 1.2枚举值)
if (url.StartsWith("https:"))
{
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
}
Encoding encoding = Encoding.UTF8; //转译编码
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);//创建请求对象
request.Method = "POST"; //post请求的一些标准参数配置
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
request.ContentType = ContentType;
//自定义头部内容
if (!string.IsNullOrEmpty(token))
{
request.Headers.Add(HttpRequestHeader.Authorization, token); //添加token
}
byte[] buffer = encoding.GetBytes(parms); //将参数字符串转换为字节数组
request.ContentLength = buffer.Length; //post传值参数标配
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //尝试获得要请求的URL的返回消息
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
result = reader.ReadToEnd();
}
}
catch (Exception ex)
{
result = "";
}
return result;
}第2步:实现主程序逻辑
在主程序中,我们按照以下逻辑执行:定义AK/SK -> 获取Token -> 构造翻译请求 -> 发送并解析结果。
- Token获取:先调用
/oauth/2.0/token端点,传入Client ID和Client Secret换取有效期的Access Token。 - 翻译调用:将Token拼接到翻译接口的Query String中,Body部分发送JSON格式的翻译指令。
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace TranslateProject
{
class Program
{
// 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务(百度云应用的AK)
private static String clientId = "YOUR_CLIENT_ID";
// 百度云中开通对应服务应用的 Secret Key(百度云应用的SK)
private static String clientSecret = "YOUR_CLIENT_SECRET";
static void Main(string[] args)
{
try
{
#region 文本翻译-通用版
//1. 获取Token
string TokenJson = getAccessToken();
if (!string.IsNullOrEmpty(TokenJson))
{
AccessToken TokenEntity = JsonConvert.DeserializeObject<AccessToken>(TokenJson);
// 检查Token是否获取成功
if (!string.IsNullOrEmpty(TokenEntity.error))
{
if (TokenEntity.error == "invalid_client" && TokenEntity.error_description == "unknown client id")
Console.WriteLine("API Key不正确");
else if (TokenEntity.error == "invalid_client" && TokenEntity.error_description == "Client authentication failed")
Console.WriteLine("Secret Key不正确");
else
Console.WriteLine("未知错误:获取Token失败");
Console.ReadKey();
return;
}
//2. 构造翻译请求URL及参数
// 文档地址:https://cloud.baidu.com/doc/MT/s/4kqryjku9
string URL = "https://aip.baidubce.com/rpc/2.0/mt/texttrans/v1?access_token="+ TokenEntity.access_token;
string q = "文本翻译是百度翻译依托领先的自然语言处理技术推出的在线文本翻译服务,可支持中、英、日、韩等200+语言互译,100+语种自动检测。";
// from: 源语言 zh(chinese), to: 目标语言 en(english)
string parms = "{ \"q\":\"" + q + "\",\"from\":\"zh\",\"to\":\"en\"}";
//3. 发送HTTP Post请求
HttpTool httppost = new HttpTool();
var strJson = httppost.HttpPost(URL, parms, "", "application/json;charset=utf-8");
Console.WriteLine(strJson);
}
#endregion
}
catch (Exception ex)
{
Console.WriteLine("翻译失败:" + ex.Message);
}
}
//调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存
public static String getAccessToken()
{
try
{
String authHost = "https://aip.baidubce.com/oauth/2.0/token";
HttpClient client = new HttpClient();
List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();
paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
paraList.Add(new KeyValuePair<string, string>("client_id", clientId));
paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret));
HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
String result = response.Content.ReadAsStringAsync().Result;
return result;
}
catch (Exception ex)
{
return "";
}
}
public class AccessToken
{
public string refresh_token { get; set; }
public int expires_in { get; set; }
public string scope { get; set; }
public string session_key { get; set; }
public string access_token { get; set; }
public string session_secret { get; set; }
public string error { get; set; }
public string error_description { get; set; }
}
}
}运行结果展示
正确配置AK/SK并运行后,控制台将输出包含译文内容的JSON数据。
扩展与其他版本
百度AI提供多种翻译版本,若业务场景不同,可参考以下文档替换对应的API Endpoint:
- 词典版:适用于短句精确匹配,文档链接:https://cloud.baidu.com/doc/MT/s/nkqrzmbpc
- 图片翻译:适用于OCR场景,文档链接:https://cloud.baidu.com/doc/MT/s/mki483xpu
这些版本的调用逻辑与上述通用版类似,主要区别在于请求URL和部分参数的差异。
常见问题排错
- invalid_client: 检查代码中的
clientId和clientSecret是否与控制台中创建的应用完全一致,区分大小写。 - Network Timeout: 确保服务器网络可以访问外网域名
aip.baidubce.com。 - TLS Error: 旧版 .NET Framework 可能默认使用 TLS 1.0/1.1,需要在代码顶部添加
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;强制启用 TLS 1.2。
以上就是C#基于百度AI实现机器翻译功能的详细内容,更多关于C#调用百度API的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









