从具有托管身份的Web应用调用Azure翻译服务

juzqafwq  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(166)

我是Azure新手。我正在从Web应用程序调用Azure翻译服务p。我想使用托管身份,到目前为止我尝试了以下方法。**您认为这是正确的方法吗?或者我还需要在Web应用程序身份中执行任何操作吗?**x1c 0d1x
1.在翻译服务中启用托管身份
1.在Azure中授予对翻译服务的访问权限翻译=>访问控制(IAM)=>添加角色分配=>创建托管身份的贡献者。

  1. Web应用程序中的代码集成
    //初始化Azure翻译客户端
    var credential = new ChainedTokenCredential(new ManagedIdentityCredential(),new AzureCliCredential()); var translatorClient = new TranslationClient(new Uri(endpoint),credential);
64jmpszr

64jmpszr1#

我同意Nicolas R的观点。每当你想将Web应用连接到任何资源时,最好将Web应用管理的身份连接到翻译服务,然后通过Azure Web应用中间件或代码访问翻译API。
请参考此MS Q & A answer流程以在Angular应用程序中使用认知服务。使用相同的步骤为您的C# .net Web应用程序,由Sedat SALMAN撰写。

为您的Web应用启用托管身份,如下所示:-

x1c 0d1x的数据

授予此 * 托管身份访问翻译服务的权限,如下所示:-



现在将此C# Translator服务代码集成到您的Web应用中间件中,以返回翻译API。您也可以从Web应用调用此Rest API。参考如下:-
添加一个类TranslationService.cs,并添加以下代码,其中包含正确的API键、位置和翻译服务的端点,如下所示:-

不带托管标识的TranslationService.cs


  1. using System;
  2. using System.Net.Http;
  3. using System.Text;
  4. using System.Threading.Tasks;
  5. using Newtonsoft.Json;
  6. public class TranslationService
  7. {
  8. private static readonly string key = "xxxxxxc051dfbc";
  9. private static readonly string endpoint = "https://api.cognitive.microsofttranslator.com";
  10. private static readonly string location = "australiaeast";
  11. public static async Task TranslateText(Stream body)
  12. {
  13. string route = "/translate?api-version=3.0&from=en&to=fr&to=zu";
  14. string textToTranslate = "I would really like to drive your car around the block a few times!";
  15. object[] requestBody1 = new object[] { new { Text = textToTranslate } };
  16. var requestBody = JsonConvert.SerializeObject(body);
  17. using (var client = new HttpClient())
  18. using (var request = new HttpRequestMessage())
  19. {
  20. request.Method = HttpMethod.Post;
  21. request.RequestUri = new Uri(endpoint + route);
  22. request.Content = new StringContent(requestBody, Encoding.UTF8, "application/json");
  23. request.Headers.Add("Ocp-Apim-Subscription-Key", key);
  24. request.Headers.Add("Ocp-Apim-Subscription-Region", location);
  25. HttpResponseMessage response = await client.SendAsync(request).ConfigureAwait(false);
  26. string result = await response.Content.ReadAsStringAsync();
  27. Console.WriteLine(result);
  28. }
  29. }
  30. }

字符串

具有托管身份的TranslationService.cs您可以根据您的用例使用任何一个代码:-

  1. using Azure.Identity;
  2. using Azure.Core;
  3. using Azure.AI.Translation.Document;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Threading.Tasks;
  8. public class TranslationService
  9. {
  10. private static readonly string endpoint = "https://api.cognitive.microsofttranslator.com";
  11. public static async Task<string> TranslateText()
  12. {
  13. string textToTranslate = "I would really like to drive your car around the block a few times!";
  14. var tokenCredential = new ManagedIdentityCredential();
  15. var translationClient = new DocumentTranslationClient(new Uri(endpoint), tokenCredential);
  16. var options = new TranslationRequestOptions { FromLanguage = "en", ToLanguages = { "fr", "zu" } };
  17. var documents = new List<DocumentTranslationInput>
  18. {
  19. new DocumentTranslationInput("1", textToTranslate),
  20. };
  21. var operation = await translationClient.StartTranslationAsync(documents, options);
  22. // Wait for the translation operation to complete
  23. await operation.WaitForCompletionAsync();
  24. if (operation.GetRawResponse().Status == 200)
  25. {
  26. var result = operation.GetValues().FirstOrDefault()?.Translations.FirstOrDefault()?.Text;
  27. return result ?? "Translation failed.";
  28. }
  29. else
  30. {
  31. return "Translation failed.";
  32. }
  33. }
  34. }


在Asp.net Web应用程序的页面中的共享文件夹中创建一个Razor页面:-

翻译.cshtml:-

  1. @page
  2. @model TranslationModel
  3. <button id="translateButton" class="btn btn-primary">Translate</button>
  4. @section scripts {
  5. <script>
  6. document.getElementById('translateButton').addEventListener('click', function () {
  7. // Call the translation function when the button is clicked
  8. fetchTranslation();
  9. });
  10. function fetchTranslation() {
  11. fetch('/Translation/Translate')
  12. .then(response => response.text())
  13. .then(result => {
  14. console.log(result);
  15. // You can display the translation result as needed on the page.
  16. })
  17. .catch(error => {
  18. console.error('Translation error:', error);
  19. });
  20. }
  21. </script>
  22. }

翻译.cshtml.cs:-

  1. using Microsoft.AspNetCore.Mvc.RazorPages;
  2. using System.Threading.Tasks;
  3. public class TranslationModel : PageModel
  4. {
  5. public async Task OnGet()
  6. {
  7. // This is the default handler when the page is requested. You can leave it empty or add any necessary initialization code.
  8. }
  9. }

更新Program.cs如下:-

  1. var builder = WebApplication.CreateBuilder(args);
  2. // Add services to the container.
  3. builder.Services.AddRazorPages();
  4. var app = builder.Build();
  5. // Configure the HTTP request pipeline.
  6. if (!app.Environment.IsDevelopment())
  7. {
  8. app.UseExceptionHandler("/Error");
  9. // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
  10. app.UseHsts();
  11. }
  12. app.UseHttpsRedirection();
  13. app.UseStaticFiles();
  14. app.UseRouting();
  15. app.UseAuthorization();
  16. // Map your translation route
  17. app.MapGet("/Translation/Translate", async context =>
  18. {
  19. // Call the TranslateText method from the TranslationService
  20. await TranslationService.TranslateText(context.Response.Body);
  21. });
  22. app.MapRazorPages();
  23. app.Run();


对托管Identity Web应用程序应用相同的逻辑。

输出:-


展开查看全部

相关问题