• 在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="5"></textarea>
            </td>
            <td><select id="from" class="form-control">
                    <option value="1">请选择</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="1">请选择</option>
                </select>
                <button id="submit" class="btn btn-default">翻译</button>
            </td>
            <td>
                <label>翻译的文本</label>
                <textarea id="transtext" class="form-control" rows="5"></textarea>
            </td>
        </tr>
        </table>
    在layout.cshtml中添加
    1   <div class="navbar-collapse collapse">
    2                 <ul class="nav navbar-nav">
    3                     <li>@Html.ActionLink("主页", "Index", "Home")</li>
    4                     <li>@Html.ActionLink("关于", "About", "Home")</li>
    5                     <li>@Html.ActionLink("联系方式", "Contact", "Home")</li>
    6                     <li>@Html.ActionLink("翻译", "Index", "Translator")</li>
    7                 </ul>
    8             </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;
                         
                        }
                    }
                })
        }
        )
    
    

    好了 现在可以使用服务了

    由于业务很复杂,即使网络很好延迟还是很严重,需要优化下



  • 相关阅读:
    数字电路与系统-公式规则知识点
    数字电路与系统-门电路基本知识1
    数字电路与系统-数制与编码2
    数字电路与系统-数制与编码1
    数字电路与系统-知识点2
    数字电路与系统-知识点1
    数字电路与系统-编码器
    数字电路与系统-组合逻辑电路的竞争冒险现象3
    数字电路与系统-组合逻辑电路的竞争冒险现象2
    前端工程师提高工作效率的几个小技巧
  • 原文地址:https://www.cnblogs.com/zuin/p/5929106.html
Copyright © 2020-2023  润新知