在Application中整合Microsoft Translator服務之使用http擷取服務

來源:互聯網
上載者:User

標籤:

一.建立項目

首先我們來建立一個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("失敗!,請聯絡管理員或使用微軟Bing 翻譯");                    }                    else {                        document.getElementById("transtext").innerHTML = _JsonData;                                         }                }            })    }    )

好了 現在可以使用服務了

由於業務很複雜,即使網路很好延遲還是很嚴重,需要最佳化下



 

 

在Application中整合Microsoft Translator服務之使用http擷取服務

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.