But Carlos Tevez's winning goal in first-half stoppage time means Villa remain in the relegation zone and in danger of being relegated for the first time since 1987.
The home side began brightly and dominated the early stages with Christian Benteke seeing a header cleared off the line by Tevez just after the 20-minute mark.
Jack Rodwell had a left-footed effort at the other end that Brad Guzan tipped over but the former Everton midfielder injured himself in shooting and was replaced by Edin Dzeko.
The arrival of the Bosnian striker perked up a sluggish City and the visitors began to take control of the game with Pablo Zabaleta denied by a combination of Guzan and post in the 37th minute.
The impressive Guzan then saved well from both Tevez and Dzeko as Roberto Mancini's men piled on the pressure with Villa's confidence beginning to drain.
And it was a defensive error from Ciaran Clark that brought the opening goal as he attempted to turn past Dzeko despite being the last man.
The Villa skipper claimed he had been fouled and while there was contact it seemed that he was already on his way down having lost his footing.
Dzeko was able to run through unchallenged before squaring the ball to Tevez who showed great composure to round Guzan before slotting the ball into the net.
Tevez had the chance to double the lead early in the second half but Matthew Lowton was able to clear his effort off the line as Villa became a little ragged in search of an equaliser.
As Villa battled, City showed the greater incision and the visitors had an effort disallowed for offside when Dzeko tucked the ball home after Guzan had tipped Yaya Toure's shot onto the post.
And Mancini's men were able to negotiate the final stages to reduce the gap on leaders Manchester United to 12 points - while leaving Villa supporters fearing the worst.