none
Web Api não responde quando utilizado HttpResponseMessage RRS feed

  • Pergunta

  • Ola!

    Eu estou tendo problema com web api com uma action que retorna um HttpResponseMessage. Este objeto retorna um stream de audio, este arquivo tem 60kb e na primeira vez retorna com sucesso, mas a partir da segunda vez o web api parece travar e não responde mais, fazendo com que o browser só fique carregando.

    Por que isso não funciona a partir da segunda vez?

    [HttpGet]
    [Route("api/card/playAudio/{text}")]
    public async Task<HttpResponseMessage> PlayAudio(string text)
    {
        var audioStream = await _cardService.GetStream(text);
        return CreateAudioResponse(audioStream);
    }
    
    private HttpResponseMessage CreateAudioResponse(System.IO.Stream audioStream)
    {
        var result = this.Request.CreateResponse(HttpStatusCode.OK);
    
        //HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
        result.Content = new StreamContent(audioStream);
        result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
        result.Content.Headers.ContentDisposition.FileName = string.Format("{0}.mp3", new Guid().ToString());
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        result.Content.Headers.ContentLength = audioStream.Length;
        return result;
    }



    Stephany Henrique de Almeida Batista - MCTS

    quarta-feira, 19 de agosto de 2015 12:31

Todas as Respostas

  • Olá Stephany!

    Aparentemente seu código esta correto, você chegou olhar se a segunda vez a requisição chega na Action da sua API?

    Dica: Utilize a IHttpActionResult você desacopla a suas Actions e facilita os testes de unidade, e você não precisa criar os responses na mão, abaixo tem um código de exemplo.

    [HttpGet]
    [Route("api/card/playAudio/{text}")]
    public async Task<IHttpActionResult> PlayAudio(string text)
    {
        var audioStream = await _cardService.GetStream(text);
        return Ok(audioStream);
    }

    Vamos nos falando por aqui para tentarmos solucionar o seu problema.

    Atenciosamente

    Nicolas Takashi

    quarta-feira, 2 de setembro de 2015 14:39