在Application中集成Microsoft Translator服务之使用http获取服务
一.创建项目
首先我们来创建一个ASP.NET Application
选择时尚时尚最时尚的MVC,为了使演示的Demo更简单,这里选择无身份验证
二.创建相关类
项目需要引入之前两个类AdmAccessToken和AdmAuthentication以便获取访问令牌,并添加一个名为Translator的控制器方便处理相关的业务
注意需要添加程序集System.Runtime.Serialization
添加一个Language_Codes
public class Language_Codes
{
public int Id { get; set; }
public string code { get; set; }
public string Name { get; set; }
}
三.创建数据库上下文类
首先我们需要引入Entity Framework框架,这里使用的是Nuget包管理
添加类CodeEntity,并且让它继承DbContext
public CodeEntity()
: base("DefaultConnection")
{
}
public DbSet<Language_Codes> Language_Code{get;set;}
}
接下来修改webconfig
<connectionStrings>
<add name="DefaultConnection" connectionString="server=.;database=LanguageCode;uid=sa;pwd="
providerName="System.Data.SqlClient" />
</connectionStrings>
在 TranslatorController中添加
CodeEntity dbcontext = new CodeEntity();
这要我们可以获取语言对应的代码了
四.搭建界面
1.修改Index方法
public ActionResult Index()
{
List<Language_Codes> list= dbcontext.Language_Code.ToList();
return View(list);
}
给TranslatorController的Index添加视图
@model IEnumerable<Translator.Models.Language_Codes>
@{
ViewBag.Title = "Index";
}
<table class ="table table-striped">
<tr>
<td>
<label>要翻译的文本</label>
<textarea id="text" class="form-control" rows=""></textarea>
</td>
<td>
将
<select id="from" class="form-control">
<option value="">请选择</option>
@foreach (var item in Model)
{
<option id="@item.Id" value="@item.code">@item.Name</option>
}
</select>
翻译成
<select id="to" class="form-control">
<option value="">请选择</option>
</select>
<button id="submit" class="btn btn-default">翻译</button>
</td>
<td>
<label>翻译的文本</label>
<textarea id="transtext" class="form-control" rows=""></textarea>
</td>
</tr>
</table>
在layout.cshtml中添加
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("主页", "Index", "Home")</li>
<li>@Html.ActionLink("关于", "About", "Home")</li>
<li>@Html.ActionLink("联系方式", "Contact", "Home")</li>
<li>@Html.ActionLink("翻译", "Index", "Translator")</li>
</ul>
</div> 效果如下
五.利用AJAX动态加载数据
1.加载LanguageCode
首先在控制器中添加一个LoadLanguageCode来处理加载语言代码请求
public ActionResult LoadLanguageCode(int id)
{
List<Language_Codes> list = dbcontext.Language_Code.Where(c=>c.Id!=id).ToList();
return Json(list);
}
在Scripts文件夹添加一个translator.js文件,并在视图中添加此文件的引用<script src="~/Scripts/translator.js"></script>
给第一个select注册一个事件,每次select中选项更改时我们去加载第二个select的选项
document.getElementById("from").onchange=function()
{
var selectedid = $(":selected","#from").attr("id");
$.ajax(
{
url: "../Translator/LoadLanguageCode",
type: "post",
data: { id: selectedid },
success: function (_JsonData)
{
$('#to').empty();
for (var i = 0; i < _JsonData.length; i++) {
$('#to').append($('<option' + ' id=' + _JsonData[i].Id + ' value=' + _JsonData[i].code + '>' + _JsonData[i].Name + '</option>'));
}
}
})
}
2.向microsoft请求服务
在TranslatorController添加 Translate方法
[HttpPost]
public ActionResult Translate(string from,string to,string text)
{
AdmAuthentication adm = new AdmAuthentication("zuin", "Ursm3pji3Fcha+70plJFrAbHT/Y00F7vyKdXlWLusmc=");
//string text = textBox1.Text;
//string from = "zh-CHS";//"zh-CHS"
//string to = "en"; string uri = "http://api.microsofttranslator.com/v2/Http.svc/Translate?text=" + System.Web.HttpUtility.UrlEncode(text) + "&from=" + from + "&to=" + to;
string authToken = "Bearer" + " " + adm.token.access_token; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(uri);
httpWebRequest.Headers.Add("Authorization", authToken);
WebResponse response = null;
try
{
response = httpWebRequest.GetResponse();
using (Stream stream = response.GetResponseStream())
{
System.Runtime.Serialization.DataContractSerializer dcs = new System.Runtime.Serialization.DataContractSerializer(Type.GetType("System.String"));
string translation = (string)dcs.ReadObject(stream);
return Json(translation);
}
}
catch
{
string code = "fail";
return Json(code);
} }
给“翻译”按钮注册事件
$('#submit').click( function ()
{
var formvalue =$("#from").val(); var tovalue = $("#to").val();
var textvalue = $("#text").val();
$.ajax(
{
url: "../Translator/Translate",
type: "post",
data: {from: formvalue, to: tovalue, text:textvalue },
success: function (_JsonData) {
$('#transtext').empty();
if (_JsonData=='fail') {
alert("失败!,请联系管理员或使用微软必应在线翻译");
}
else {
document.getElementById("transtext").innerHTML = _JsonData; }
}
})
}
)
好了 现在可以使用服务了
由于业务很复杂,即使网络很好延迟还是很严重,需要优化下
在Application中集成Microsoft Translator服务之使用http获取服务的更多相关文章
- 在Application中集成Microsoft Translator服务之开发前准备
第一步:准备一个微软账号 要使用Microsoft Translator API需要在Microsoft Azure Marketplace(https://datamarket.azure.com/ ...
- 在Application中集成Microsoft Translator服务之获取访问令牌
我在这里画了一张图来展示业务逻辑 在我们调用microsoft translator server之前需要获得令牌,而且这个令牌的有效期为10分钟.下表列出所需的参数和对于的说明 参数 描述 clie ...
- 在Application中集成Microsoft Translator服务之翻译语言代码
Microsoft Translator支持多种语言,当我们获取服务时使用这些代码来表示我们是使用哪种语言翻译成什么语言,以下是相关语言对应的代码和中文名 为了方便我已经将数据库上传到云盘上,读者可 ...
- 在Application中集成Microsoft Translator服务之优化
在一篇文章中我们已经实现了功能,但是一个明显的问题是响应时间非常长,用户体验非常糟糕,这篇文章将带你找出问题所在并进行优化 为了找出追魁祸首,这里使用 System.Diagnostics.Stopw ...
- 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)
作者:陈希章 发表于 2017年6月25日 谈一谈.NET 的跨平台 终于要写到这一篇了.跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标.我在前面的文章已经提到过了,Micro ...
- 在PowerShell脚本中集成Microsoft Graph
作者:陈希章 发表于2017年4月23日 我旗帜鲜明地表态,我很喜欢PowerShell,相比较于此前的Cmd Shell,它有一些重大的创新,例如基于.NET的类型系统,以及管道.模块的概念等等.那 ...
- 在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(二)---静态文件如何部署
目前,较为成熟的技术是采用laravelS组件,注意和laravel 区别laravelS多了一个大写的S,由于laravelS默认监听5200端口,所以laravel项目要做一些调整 例如: 静态文 ...
- 在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(nginx配置篇章)
laravel项目中的配置 原文出处:https://laravelacademy.org/post/19700.html,感谢原文作者让laravel这款可爱的php框架,进入了高并发的殿堂 如果 ...
- 在ASP.NET Web Application中通过SOAP协议调用Bing搜索服务
本文介绍了如何在ASP.NET Web Application中将Bing搜索作为Web Service来使用,并通过HTTP的SOAP协议在ASP.NET Web Application中调用Bin ...
随机推荐
- ASP.NET全局错误处理和异常日志记录以及IIS配置自定义错误页面
应用场景和使用目的 很多时候,我们在访问页面的时候,由于程序异常.系统崩溃会导致出现黄页.在通常的情况下,黄页对于我们来说,帮助是极大的,因为它可以帮助我们知道问题根源,甚至是哪一行代码出现了错误.但 ...
- Linux配置本地无密码访问
本机配置无密码访问基本操作步骤: 1.ssh-keygen (效果同ssh-keygen -t rsa 一样,也可以ssh-keygen -t dsa) 2.ssh-copy-id -i ~/.ssh ...
- [WPF系列]-Deep Zoom
参考 Deep Zoom in Silverlight
- 学习大神笔记之 “MyBatis学习总结(一)”
1.准备工作 软件:eclipse. mysql .navicat for mysql 包:mybatis-3.1.1.jar mysql-connector-java-5.1.7-bin.jar ...
- [Template]高精度模板
重新写一下高精度模板(不要问我为什么) 自认为代码风格比较漂亮(雾 如果有更好的写法欢迎赐教 封装结构体big B是压位用的进制,W是每位长度 size表示长度,d[]就是保存的数字,倒着保存,从1开 ...
- UVA11021 Tribles[离散概率 DP]
UVA - 11021 Tribles GRAVITATION, n. “The tendency of all bodies to approach one another with a stren ...
- [tem]线段树练习
1080 线段树练习 单点修改,区间查询和 #include <iostream> #include <cstdio> #include <algorithm> # ...
- iOS 2D绘图 (Quartz2D)之Transform(CTM,Translate,Rotate,scale)
前言:Quartz默认采用设备无关的user space来进行绘图,当context(画板)建立之后,默认的坐标系原点以及方向也就确认了,可以通过CTM(current transformation ...
- GridView绑定Visible
hyerLinkFiled的显示绑定方式 ,强制类型转换后再绑定! Visible='<%#Convert.ToBoolean(Eval("字段名")) %>'
- C#.NET 大型企业信息化系统 - 防黑客攻击 - SSO系统加固优化经验分享
好久没写文章了,突然间也不知道写什么好了一样,好多人可能以为我死了,写个文章分享一下.证明一下自己还在,很好的活着吧,刷个存在感. 放弃了很多娱乐.休闲.旅游.写文章.看书.陪伴家人,静心默默的用了接 ...