2016-08-11 16 views
1

私は、Microsoft BingスピーチAPIにHTTPポストリクエストを送信しようとしています。まず、 "アクセストークン"を返信する投稿要求を送信する必要があります。このトークンは、実際のファイルをアップロードするための別の投稿要求で使用されます(応答として転写を取得します)。ポスト要求し、正常にアクセストークンを取得しますが、私は私の第2のポスト要求のための合理的な応答を取得することはできませんよ、私はこのページに従います。https://www.microsoft.com/cognitive-services/en-us/speech-api/documentation/api-reference-rest/bingvoicerecognitionC#のHTTPポストリクエストをMicrosoft BingスピーチAPIに送信

これは、第2のポスト要求である:

 Guid requestId = Guid.NewGuid(); 
     var Uri = @"https://speech.platform.bing.com/recognize?version=3.0&requestid=" + requestId.ToString() + @"&appID=D4D52672-91D7-4C74-8AD8-42B1D981415A&format=json&locale=en-US&device.os=Windows%20OS&scenarios=ulm&instanceid=f1efbd27-25fd-4212-9332-77cd63176112"; 
     HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, Uri); 

     request.Headers.Add("Authorization", String.Format("Bearer {0}", accessToken)); 
     request.Headers.TryAddWithoutValidation("Content-Type", @"audio/wav; samplerate=16000"); 
     MemoryStream ms = new MemoryStream(); 
     using (var fs = System.IO.File.OpenRead("audio.wav")) 
     { 
      byte[] buffer = new byte[1024 * 8]; 
      while (fs.Read(buffer, 0, buffer.Length) > 0) 
      { 
       ms.Write(buffer, 0, buffer.Length); 
      } 
      fs.Close(); 
     } 
     ms.Seek(0, SeekOrigin.Begin); 

     HttpContent _Body = new StreamContent(ms); 
     request.Content = _Body; 
     var client2 = new HttpClient(); 
     var response2 = client2.SendAsync(request); 

I私はデバッグ時に、このプロパティがリクエストのヘッダーに設定されているとは見えません。実際には、Content-Typeはありません。ヘッダー。任意のhel pは高く評価されます。対応するcurlコマンドについて説明しているこのページも参考になります。https://social.msdn.microsoft.com/Forums/en-US/ad73e4f1-e576-4080-9fe7-060cc2f583ca/microsoft-bing-voice-recognition-api-authorization-404resource-not-found?forum=SpeechService

答えて

1

Content-Typeはコンテンツに関連するヘッダーです。次のコードは、私の作品:

public async Task<string> SendRequestAsync(string url, string bearerToken, string contentType, string fileName) 
{ 
    var content = new StreamContent(File.OpenRead(fileName)); 
    content.Headers.TryAddWithoutValidation("Content-Type", contentType); 

    using (var httpClient = new HttpClient()) 
    {   
     httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken); 
     var response = await httpClient.PostAsync(url, content); 

     return await response.Content.ReadAsStringAsync(); 
    } 
} 

あなたのケースで呼び出し(あなたが同期コンテキストで作業する場合):

var result = SendRequestAsync(Uri, accessToken, "audio/wav; samplerate=16000", "audio.wav").Result; 
1

あなたは2つのリクエストを行う必要がないように、代わりに次のヘッダを送信することができますトークンのために。

あなたは、アプリケーションに必要以上の権限工場以上の要求を作成して確認する必要がないためにあなたが'Ocp-Apim-Subscription-Key': '{YOUR AZURE TOKEN}'ために使用することができ'Authorization': 'Bearer {TOKEN}'ヘッダを使用するのではなく、毎回ログインする必要がないようにしたい場合は、それより早く

注:{TOKEN}は

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzY29wZSI6Imh0dHBzOi8vc3BlZWNoLnBsYXRmb3JtLmJpbmcuY29tIiwic3Vic2NyaXB0aW9uLWlkIjoiZmFhZTNlYTkxNmI1NGMxZWEyODY4MDlhYTg3ZWE1MmUiLCJwcm9kdWN0LWlkIjoiQmluZy5TcGVlY2guUHJldmlldyIsImNvZ25pdGl2ZS1zZXJ2aWNlcy1lbmRwb2ludCI6Imh0dHBzOi8vYXBpLmNvZ25pdGl2ZS5taWNyb3NvZnQuY29tL2ludGVybmFsL3YxLjAvIiwiYXp1cmUtcmVzb3VyY2UtaWQiOiIiLCJpc3MiOiJ1cm46bXMuY29nbml0aXZlc2VydmljZXMiLCJhdWQiOiJ1cm46bXMuc3BlZWNoIiwiZXhwIjoxNTAwODgxNjIzfQ.KdlCrIJ_H0jxs1yyeyYxYR7ucbLuFKT__ep7lGJmGbU 

注2などのJWTトークンです:{YOUR AZURE TOKENは} d5kals90935b40809dc6k38533c21e85のようなもので、あなたはそれhere

のrequesを見つけますこれは次のようになります:

curl -v -X POST "https://speech.platform.bing.com/speech/recognition/interactive/cognitiveservices/v1?language=es-ES&locale=es-ES&format=simple&requestid=req_id" -H "Ocp-Apim-Subscription-Key: d5kals90935b40809dc6k38533c21e85" -H 'Transfer-Encoding: chunked' -H 'Content-type: audio/wav; codec="audio/pcm"; samplerate=8000' --data-binary @"{BINAYFILE}.wav" 
関連する問題