You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已满足所有要求,为何Microsoft Cognitive Speech API仍返回Bad Request?

解决Microsoft Speech-to-text API Bad Request问题的关键修正

1. 移除重复认证头

微软语音API仅支持一种认证方式,同时添加Bearer Token和Ocp-Apim-Subscription-Key会导致认证冲突,保留其中一个即可。例如保留订阅密钥:

// 删除此行重复认证:
// client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", speechKey);

2. 修正Accept请求头

API返回JSON格式的识别结果,而非音频,需将Accept头改为application/json:

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

3. 取消MultipartFormDataContent包裹

Conversation识别端点要求直接将音频流作为请求体发送,无需用multipart格式封装:

// 替换原multipart相关代码
var audioStream = File.OpenRead(HttpContext.Current.Server.MapPath("~/audios/audio_06012023094443961.wav"));
var fileContent = new StreamContent(audioStream);
fileContent.Headers.ContentType = new MediaTypeHeaderValue("audio/wav");

// 直接发送音频流作为请求体
var resp = client.PostAsync($"https://{speechRegion}.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US", fileContent);

4. 统一文件名(规范优化)

确保读取的文件名与代码引用一致,避免潜在文件读取异常:

string audioFileName = "audio_06012023094443961.wav";
var audioStream = File.OpenRead(HttpContext.Current.Server.MapPath($"~/audios/{audioFileName}"));

5. 优化异步等待逻辑

不要用循环Sleep等待异步操作,改用await(需将方法改为async):

public static async Task<object> MC()
{
    // ... 其他代码 ...
    var resp = await client.PostAsync(/* 请求地址与内容 */);
    return resp.ReasonPhrase;
}

额外检查:确保音频文件符合API要求——WAV格式、PCM编码、16kHz采样率、16位深度、单声道,且文件大小未超过服务层级限制。

内容的提问来源于stack exchange,提问作者Sarbjit Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:52:51