一.创建项目

首先我们来创建一个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获取服务的更多相关文章

  1. 在Application中集成Microsoft Translator服务之开发前准备

    第一步:准备一个微软账号 要使用Microsoft Translator API需要在Microsoft Azure Marketplace(https://datamarket.azure.com/ ...

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

    我在这里画了一张图来展示业务逻辑 在我们调用microsoft translator server之前需要获得令牌,而且这个令牌的有效期为10分钟.下表列出所需的参数和对于的说明 参数 描述 clie ...

  3. 在Application中集成Microsoft Translator服务之翻译语言代码

    Microsoft  Translator支持多种语言,当我们获取服务时使用这些代码来表示我们是使用哪种语言翻译成什么语言,以下是相关语言对应的代码和中文名 为了方便我已经将数据库上传到云盘上,读者可 ...

  4. 在Application中集成Microsoft Translator服务之优化

    在一篇文章中我们已经实现了功能,但是一个明显的问题是响应时间非常长,用户体验非常糟糕,这篇文章将带你找出问题所在并进行优化 为了找出追魁祸首,这里使用 System.Diagnostics.Stopw ...

  5. 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)

    作者:陈希章 发表于 2017年6月25日 谈一谈.NET 的跨平台 终于要写到这一篇了.跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标.我在前面的文章已经提到过了,Micro ...

  6. 在PowerShell脚本中集成Microsoft Graph

    作者:陈希章 发表于2017年4月23日 我旗帜鲜明地表态,我很喜欢PowerShell,相比较于此前的Cmd Shell,它有一些重大的创新,例如基于.NET的类型系统,以及管道.模块的概念等等.那 ...

  7. 在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(二)---静态文件如何部署

    目前,较为成熟的技术是采用laravelS组件,注意和laravel 区别laravelS多了一个大写的S,由于laravelS默认监听5200端口,所以laravel项目要做一些调整 例如: 静态文 ...

  8. 在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(nginx配置篇章)

    laravel项目中的配置  原文出处:https://laravelacademy.org/post/19700.html,感谢原文作者让laravel这款可爱的php框架,进入了高并发的殿堂 如果 ...

  9. 在ASP.NET Web Application中通过SOAP协议调用Bing搜索服务

    本文介绍了如何在ASP.NET Web Application中将Bing搜索作为Web Service来使用,并通过HTTP的SOAP协议在ASP.NET Web Application中调用Bin ...

随机推荐

  1. java实现REST方式的webService

    一. 简介 WebService有两种方式,一是SOAP方式,二是REST方式.SOAP是基于XML的交互,WSDL也是一个XML文档, 可以使用WSDL作为SOAP的描述文件:REST是基于HTTP ...

  2. Chrome

    一.简介 二.安装 1)离线版 http://www.google.cn/chrome/browser/thankyou.html?statcb=1&platform=win64&st ...

  3. 推荐一款 chrome SSH 插件 - Secure Shell

    http://blog.csdn.net/jizhongchun/article/details/8519413 导读:我就是一个Chrome Fans.最近发现一款google官方出的SSH插件 - ...

  4. Useful commmands in Gentoo

    Safe way to upgrade: emerge --sync & eix-sync emerge -avuDN --with-bdeps y --keep-going world et ...

  5. Eclipse调试常用技巧

    1. 条件断点 断点大家都比较熟悉,在Eclipse Java 编辑区的行头双击就会得到一个断点,代码会运行到此处时停止. 条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才 ...

  6. Qt 之 饼图

    Qt 库由许多模块组成,其中的 Qt Charts,包含了一系列图表组件. 1  饼图 (pie chart) 1.1  Charts 模块 .pro 中添加如下语句: QT += charts 头文 ...

  7. JSONResult 封装

    import java.util.List; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson. ...

  8. jQuery超链接提示,提示跟随鼠标动

    功能:实现鼠标移动到一个超链接时,鼠标右下角产生一个提示,并跟谁鼠标移动,知道鼠标离开超链接. 效果: 源码: <!--本案例是鼠标放在超链接上时,鼠标旁边有提示这是个超练级,以及放在图片上时图 ...

  9. 如何正确使用 Composer 安装 Laravel 扩展包

    我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 composer ...

  10. 去除多余的cell 和最后一行cell显示顶头底线

    去除多余cell YourTableview.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 最后一行cell底线顶头显示 s ...