Pep Guardiola’s side slipped to only their second Premier League defeat of the season on his 200th game in charge at the club.
City remain third in the league table while Palace move up to 13th position.
“It was about getting in their faces and not letting them play,” Zaha said postmatch. “We know how good they are, we wanted to show them what we could do.
“I scuffed it but a goal is a goal. I was just buzzing to see it go in so I was happy. Conor Gallagher brings a lot of energy and I needed people to link up with and it makes a mass difference when he helps out.
— Wilfried Zaha (@wilfriedzaha) October 30, 2021
“I feel like we have had a threat but the difference now is that we keep the ball from the back and build and make our chances. We are exploiting our talent.”
The visitors took a shock lead when Gallagher dispossessed Laporte to play in Zaha to score his 50th Premier League goal for Palace.
Following the opener, Palace defended well and City failed to create many clear-cut chances throughout the first half.
Just before the break, the hosts were reduced to 10 men after Laporte brought down Zaha and was shown a straight red card for denying a clear goal-scoring opportunity.
Palace should have doubled their lead five minutes into the second half but Marc Guehi failed to hit the target with a close-range header.
Within the space of two minutes, both sides had goals ruled out for offside. Zaha thought he scored his second of the day but his strike was disallowed.
With two minutes remaining, Gallagher sealed an impressive win for Palace with a curling finish past City goalkeeper Ederson.
“They have good players. I knew it would be a real tough game,” Guardiola said. “I saw the Brighton and Arsenal games. I knew how difficult they would be. They showed it today.”
When asked about Laporte’s sending off, Guardiola added: “Could be yellow card, could be red it depends on the decision of the boss, the referee.. unfortunately today, many, many things went wrong and we lost the game.”