如何使用javascript和webapi c发送wav音频文件#

如何使用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/

我需要向webapi控制器发送一个音频wav文件,用于microsoft bing语音api调用。 我所做的是

  • 在客户端使用javascript将录制的音频转换为base64数据

  • 使用ajax调用调用webapi控制器并发送base64音频数据 还有

    3.在webapi控制器中,将base64数据转换为字节并发送到restpi(microsoft)

  • 请帮助我如何正确执行所有这些步骤

    ajax调用

    $.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
    }