在Application中集成Microsoft Translator服务之获取访问令牌

访问令牌类似于web中的cookie

我在这里画了一张图来展示业务逻辑

在我们调用microsoft translator server之前需要获得令牌,而且这个令牌的有效期为10分钟。下表列出所需的参数和对于的说明    

参数描述
client_id必须的,指你在Azuzre注册应用程序的客户端ID
client_secret必须的,指你在Azuzre注册应用程序的客户端密钥
scope  必须的,默认使用http://api.microsofttranslator.com     
grant_type必须的,默认使用"client_credentials" 

 

 

 

 

 

 

Azure返回给我们的也是四个属性,并且以json的形势返回,下表列出属性和对应的描述

属性描述
access_token验证您可以访问 Microsoft 翻译 API 访问令牌
token_type访问令牌的格式。
expires_in访问令牌无效的秒数
scope此标记为有效的域。对于微软翻译 API,域名是http://api.microsofttranslator.com

 

 

 

 

 

Bing AppID 机制已废弃,不再受支持。如上文所述,您必须获取访问令牌来使用微软翻译 API。访问令牌是更安全,并且访问的令牌在规定时间内可以被后续程序调用

注意以下两点

1.使用"Bearer"+access_toke的值作为访问令牌

2.令牌有效期为10分钟,过期了需要重新申请

下面来使用类AdmAccessToken,使用它来存储Azure返回的属性

 1 [DataContract]
 2     class AdmAccessToken
 3     {
 4         [DataMember]
 5         public string access_token { get; set; }
 6 
 7         [DataMember]
 8         public string token_type { get; set; }
 9 
10         [DataMember]
11         public string expires_in { get; set; }
12 
13         [DataMember]
14         public string scope { get; set; }
15 
16     }

这个类的四个属性的Azure返回的属性相对应,并加入[DataContract][DataMember]方面对返回的json序列化成AdmAccessToken的对象

接下来使用一个类AdmAuthentication,使用它来帮助我们完成令牌的请求

 public class AdmAuthentication
    {
        public static readonly string DatamarketAccessUri = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13";
        private string clientId { get; set; }
        private string clientSecret { get; set; }
        private string scope { get; set; }
        private string grant_type { get; set; }
        private string request { get; set; }
        public AdmAccessToken token { get; set; }

        public AdmAuthentication(string clientId, string clientSecret)
        {
            this.clientId = clientId;
            this.clientSecret = clientSecret;
            this.request = string.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope=http://api.microsofttranslator.com", HttpUtility.UrlEncode(clientId), HttpUtility.UrlEncode(clientSecret));
            this.token = HttpPost(DatamarketAccessUri, this.request);
        }
        private AdmAccessToken HttpPost(string DatamarketAccessUri, string requestDetails)
        {
            //Prepare OAuth request 
            WebRequest webRequest = WebRequest.Create(DatamarketAccessUri);
            webRequest.ContentType = "application/x-www-form-urlencoded";
            webRequest.Method = "POST";
            byte[] bytes = Encoding.ASCII.GetBytes(requestDetails);
            webRequest.ContentLength = bytes.Length;
            using (Stream outputStream = webRequest.GetRequestStream())
            {
                outputStream.Write(bytes, 0, bytes.Length);
            }
            using (WebResponse webResponse = webRequest.GetResponse())
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(AdmAccessToken));
                //Get deserialized object from JSON stream
                AdmAccessToken token = (AdmAccessToken)serializer.ReadObject(webResponse.GetResponseStream());
                return token;
            }

        }
}

  好了,现在完成了令牌的请求,接下来可以利用令牌获取翻译服务了

 

转载于:https://www.cnblogs.com/zuin/p/5927591.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值