Olá,
Como melhoria, acredito que parâmetro {idProduto} deva ser removido da rota definida para a execução do método PUT. Porque a identificação do produto dentro do carrinho no método TrocaQuantidade está sendo feita somente pelo objeto Produto enviado no corpo da requisição.
[Route("api/carrinho/{idCarrinho}/produto/quantidade")]
public HttpResponseMessage Put([FromBody]Produto produto, [FromUri]int idCarrinho)
{
CarrinhoDAO dao = new CarrinhoDAO();
Carrinho carrinho = dao.Busca(idCarrinho);
carrinho.TrocaQuantidade(produto);
return Request.CreateResponse(HttpStatusCode.OK);
}
public void TrocaQuantidade(Produto produto)
{
Produto produtoCarregado = Produtos.FirstOrDefault(p => p.Id == produto.Id);
produtoCarregado.Quantidade = produto.Quantidade;
}