如何使用javascript和webapi c发送wav音频文件#
我需要向webapi控制器发送一个音频wav文件,用于microsoft bing语音api调用。 我所做的是如何使用javascript和webapi c发送wav音频文件#,javascript,c#,ajax,asp.net-mvc,asp.net-web-api,Javascript,C#,Ajax,Asp.net Mvc,Asp.net Web Api,我需要向webapi控制器发送一个音频wav文件,用于microsoft bing语音api调用。 我所做的是 在客户端使用javascript将录制的音频转换为base64数据 使用ajax调用调用webapi控制器并发送base64音频数据 还有 3.在webapi控制器中,将base64数据转换为字节并发送到restpi(microsoft) 请帮助我如何正确执行所有这些步骤 ajax调用 $.ajax({ url: 'http://localhost:49818/
$.ajax({
url: 'http://localhost:49818/api/voice',
type: 'POST',
data: base64Data,
dataType: 'json',
contentType: "application/json",
success: function (data) {
alert(data);
},
webapi控制器方法
string b64 = Request.Content.ReadAsStringAsync().Result;
//string text = System.IO.File.ReadAllText(@"D:\\base64.txt");
var client = new HttpClient();
byte[] toBytes1 = Encoding.ASCII.GetBytes(b64);
var uri = "https://westus.api.cognitive.microsoft.com/spid/v1.0/identificationProfiles/a1cb4a95-9e09-4f54-982b-09632aee7458/enroll?shortAudio=true";
HttpResponseMessage response;
byte[] toBytes = Encoding.ASCII.GetBytes(b64);
using (var content = new ByteArrayContent(toBytes))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
//content.Headers.ContentType = new MediaTypeHeaderValue("audio/wav");
response = await client.PostAsync(uri, content);
}
contentType
是您正在发送的数据类型,因此application/json;默认值为application/x-www-form-urlencoded;字符集=UTF-8
如果使用application/json
,则必须使用json.stringify()
才能发送json对象
JSON.stringify()
将javascript对象
转换为JSON
文本,并将其存储在字符串中
data: JSON.stringify({"mydata":base64Data}),
在控制器中,您必须传递一个名为myData
的参数
C#
更新
$.ajax({
url: 'http://localhost:49818/api/voice',
type: 'POST',
data:{"mydata":base64Data},
dataType: 'json',
success: function (data) {
alert(data);
},
});
C#
好的,完成了,那么如何将base64数据转换为字节,byte[]toBytes1=Encoding.ASCII.GetBytes(b64)。。这一行出错字节看看这里:在web api控制器中获取null值,这里mydata为null,如何从ajaxcall发送数据,我使用了data:JSON.stringify({“mydata”:base64Data})
//POST:api/voice public async void POST([FromBody]string mydata){//code}
@RamseenRamsi,您是否为您的方法添加了[HttpPost]
动词?是的,我现在添加了,但它仍然返回空值,但当我像这样添加时,我的方法string b64=Request.Content.ReadAsStringAsync().Result代码>我从ajax中获取数据,但数据不够准确,似乎已损坏。
$.ajax({
url: 'http://localhost:49818/api/voice',
type: 'POST',
data:{"mydata":base64Data},
dataType: 'json',
success: function (data) {
alert(data);
},
});
public async void Post([FromBody] string mydata){
//code
}