404 erreur endpoint traduction de document

Arthur-Olivier Fortin 45 Points de réputation
2024-09-17T19:18:18.2233333+00:00

Bonjour. J'ai déployé un modèle de traduction de documents et je me suis fié au code d'exemple pour afficher les formats de documents disponibles en C#: https://video2.skills-academy.com/fr-ca/azure/ai-services/translator/document-translation/how-to-guides/use-rest-api-programmatically?tabs=csharp. Cependant, après plusieurs tentative et recherche, j'arrive tout le temps à une erreur 404 comme quoi le service est introuvable.
Le modèle est un modèle de région global avec facturation S1 donc je devrais avoir accès à mon endpoint. Voici le code de vos documentations:
using System;

using System.Net.Http;

using System.Threading.Tasks;

class Program

{

private static readonly string basePath = "{your-document-translation-endpoint}/translator/document/formats";

static readonly string route = "?api-version={date}&type=document";

private static readonly string key = "{your-api-key}";

static async Task Main(string[] args)

{

HttpClient client = new HttpClient();

using HttpRequestMessage request = new HttpRequestMessage();

{

request.Method = HttpMethod.Get;

request.RequestUri = new Uri(basePath + route);

request.Headers.Add("Ocp-Apim-Subscription-Key", key);

HttpResponseMessage response = await client.SendAsync(request);

string result = response.Content.ReadAsStringAsync().Result;

Console.WriteLine($"Status code: {response.StatusCode}");

Console.WriteLine($"Response Headers: {response.Headers}");

Console.WriteLine();

Console.WriteLine(result);

}

}
J'ai tenté plusieurs approches et url différentes avec postman mais rien de concluant.

Azure
Azure
Plateforme et infrastructure de cloud computing pour la génération, le déploiement et la gestion d’applications et de services à travers un réseau mondial de centres de données gérés par Microsoft.
238 questions
0 commentaires Aucun commentaire
{count} votes

Réponse acceptée
  1. Alexis Thorez (CONCENTRIX CORPORATION) 10 010 Points de réputation Fournisseur Microsoft
    2024-09-19T07:14:56.44+00:00

    Solution proposée et validée par Arthur-Olivier Fortin

    this was what worked for me:

    `        [HttpPost("api/translator")]
            public async Task<IActionResult> Translator([FromForm] IFormFile document, [FromForm] string sourceLanguage, [FromForm] string targetLanguage)
            {
    
    
                string translatorPath = _configuration["AzureTranslatorSynchronous:Endpoint"];
                string apiVersion = _configuration["AzureTranslatorSynchronous:ApiVersion"];
                string key = _configuration["AzureTranslatorSynchronous:SubscriptionKey"];
    
                using var client = new HttpClient();
                using var httpRequest = new HttpRequestMessage(HttpMethod.Post, $"{translatorPath}?sourceLanguage={sourceLanguage}&targetLanguage={targetLanguage}&api-version={apiVersion}");
                var content = new MultipartFormDataContent();
    
                if (document != null)
                {
                    var documentContent = new StreamContent(document.OpenReadStream());
                    documentContent.Headers.ContentType = new MediaTypeHeaderValue(document.ContentType);
                    content.Add(documentContent, "document", document.FileName);
                }
    
                httpRequest.Content = content;
                httpRequest.Headers.Add("Ocp-Apim-Subscription-Key", key);
    
                HttpResponseMessage response = await client.SendAsync(httpRequest);
    
                if (response.IsSuccessStatusCode)
                {
                    // Extraire le nom de fichier et l'extension
                    string originalFileName = Path.GetFileNameWithoutExtension(document.FileName);
                    string fileExtension = Path.GetExtension(document.FileName);
    
                    // Créer le nouveau nom de fichier avec le suffixe de la langue cible
                    string newFileName = $"{originalFileName}-{targetLanguage}{fileExtension}";
    
                    // Chemin du fichier temporaire
                    var filePath = Path.Combine(Path.GetTempPath(), newFileName);
    
                    // Enregistrer le fichier traduit avec le nouveau nom
                    await using var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None);
                    await response.Content.CopyToAsync(fileStream);
                    fileStream.Close();
    
                    // Lire le fichier en tant que tableau d'octets
                    var fileBytes = await System.IO.File.ReadAllBytesAsync(filePath);
    
                    // Retourner le fichier en tant que blob dans la réponse JSON
                    return Ok(new { fileName = newFileName, fileContent = Convert.ToBase64String(fileBytes) });
                }
                else
                {
                    var error = await response.Content.ReadAsStringAsync();
                    _logger.LogError($"Error occurred while calling the translation API: {error}");
                    return StatusCode((int)response.StatusCode, new { message = "Error occurred while calling the translation API", details = error });
                }
            }
    
    
    `
    

    with a JSON like this

    `  "AzureTranslatorSynchronous": {
        "SubscriptionKey": "SERVICE-KEY",
        "Endpoint": "CUSTOM-ENDPOINT",
        "ApiVersion" : "2024-05-01"
      }
    
    
    `
    

    Based on this https://video2.skills-academy.com/en-us/azure/ai-services/translator/document-translation/reference/get-supported-document-formats The correct documentation would be the one from the link for API Version: 2024-05-01. The global link and the link https://<resource-name>.cognitiveservices.azure.com/translator/text/batch/v1.0/batches do not work for me. (Note that there is also JavaScript code that calls the API with forms.)

    A bientôt

    Alexis

    Si cette réponse a répondu à votre question, veuillez « Accepter comme réponse » et voter en utilisant « Pouce levé » afin que la pertinence de ce message s’améliore lorsque quelqu’un dans la communauté recherche une requête similaire

    image (2)

    0 commentaires Aucun commentaire

2 réponses supplémentaires

Trier par : Le plus utile
  1. Nina Kalenderska (Concentrix International) 260 Points de réputation Fournisseur Microsoft
    2024-09-18T11:56:48.9233333+00:00

    Bonjour,

    Voici quelques points que vous pouvez suivre:

    Vérifiez l'URL du point de terminaison : assurez-vous que l'URL du point de terminaison est correcte. Il doit suivre le format :

    https://<resource-name>.cognitiveservices.azure.com/translator/text/batch/v1.0/batches
    

    Remplacez <resource-name> par le nom réel de votre ressource.

    Disponibilité régionale : assurez-vous que la version d'API que vous essayez d'utiliser est disponible dans votre région. Certaines versions préliminaires ne sont disponibles que dans des régions spécifiques.

    Autorisations d'accès : vérifiez que vous disposez des autorisations nécessaires et que votre clé d'abonnement est correcte.

    Pour des d'informations complémentaires:

    https://github.com/MicrosoftDocs/azure-docs/issues/57430#event-3480744006

    https://video2.skills-academy.com/en-us/answers/questions/1514842/document-intelligence-ai-returns-404

    Cordialment,

    Nina

    1 personne a trouvé cette réponse utile.
    0 commentaires Aucun commentaire

  2. Arthur-Olivier Fortin 45 Points de réputation
    2024-09-18T22:18:20.0466667+00:00

    this was what worked for me:

            [HttpPost("api/translator")]
            public async Task<IActionResult> Translator([FromForm] IFormFile document, [FromForm] string sourceLanguage, [FromForm] string targetLanguage)
            {
    
    
                string translatorPath = _configuration["AzureTranslatorSynchronous:Endpoint"];
                string apiVersion = _configuration["AzureTranslatorSynchronous:ApiVersion"];
                string key = _configuration["AzureTranslatorSynchronous:SubscriptionKey"];
    
                using var client = new HttpClient();
                using var httpRequest = new HttpRequestMessage(HttpMethod.Post, $"{translatorPath}?sourceLanguage={sourceLanguage}&targetLanguage={targetLanguage}&api-version={apiVersion}");
                var content = new MultipartFormDataContent();
    
                if (document != null)
                {
                    var documentContent = new StreamContent(document.OpenReadStream());
                    documentContent.Headers.ContentType = new MediaTypeHeaderValue(document.ContentType);
                    content.Add(documentContent, "document", document.FileName);
                }
    
                httpRequest.Content = content;
                httpRequest.Headers.Add("Ocp-Apim-Subscription-Key", key);
    
                HttpResponseMessage response = await client.SendAsync(httpRequest);
    
                if (response.IsSuccessStatusCode)
                {
                    // Extraire le nom de fichier et l'extension
                    string originalFileName = Path.GetFileNameWithoutExtension(document.FileName);
                    string fileExtension = Path.GetExtension(document.FileName);
    
                    // Créer le nouveau nom de fichier avec le suffixe de la langue cible
                    string newFileName = $"{originalFileName}-{targetLanguage}{fileExtension}";
    
                    // Chemin du fichier temporaire
                    var filePath = Path.Combine(Path.GetTempPath(), newFileName);
    
                    // Enregistrer le fichier traduit avec le nouveau nom
                    await using var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None);
                    await response.Content.CopyToAsync(fileStream);
                    fileStream.Close();
    
                    // Lire le fichier en tant que tableau d'octets
                    var fileBytes = await System.IO.File.ReadAllBytesAsync(filePath);
    
                    // Retourner le fichier en tant que blob dans la réponse JSON
                    return Ok(new { fileName = newFileName, fileContent = Convert.ToBase64String(fileBytes) });
                }
                else
                {
                    var error = await response.Content.ReadAsStringAsync();
                    _logger.LogError($"Error occurred while calling the translation API: {error}");
                    return StatusCode((int)response.StatusCode, new { message = "Error occurred while calling the translation API", details = error });
                }
            }
    
    
    

    with a JSON like this

      "AzureTranslatorSynchronous": {
        "SubscriptionKey": "SERVICE-KEY",
        "Endpoint": "CUSTOM-ENDPOINT",
        "ApiVersion" : "2024-05-01"
      }
    
    
    

    Based on this https://video2.skills-academy.com/en-us/azure/ai-services/translator/document-translation/reference/get-supported-document-formats

    The correct documentation would be the one from the link for API Version: 2024-05-01. The global link and the link https://<resource-name>.cognitiveservices.azure.com/translator/text/batch/v1.0/batches do not work for me.

    (Note that there is also JavaScript code that calls the API with forms.)

    1 personne a trouvé cette réponse utile.

Votre réponse

Les réponses peuvent être marquées comme réponses acceptées par l’auteur de la question, ce qui aide les utilisateurs à savoir que la réponse a résolu le problème de l’auteur.