设为首页 收藏本站
查看: 953|回复: 0

[经验分享] 在Application中集成Microsoft Translator服务之获取访问令牌

[复制链接]

尚未签到

发表于 2017-7-1 12:46:17 | 显示全部楼层 |阅读模式
  访问令牌类似于web中的cookie
  我在这里画了一张图来展示业务逻辑
DSC0000.png

  在我们调用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;
}
}
}

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-390007-1-1.html 上篇帖子: css中vertical-align和line-height的用法 下篇帖子: Hue
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表