Manuel Pellegrini’s men appeared to be coasting to victory after racing into a 2-0 half-time lead thanks to goals from Yaya Toure and Vincent Kompany.
But Fulham battled back bravely in the second half to level matters through Kieran Richardson’s goal and Kompany’s comedy own goal.
However, City responded in style as substitutes Jesus Navas and James Milner struck late on to save their captain’s blushes and maintain their good run of form.
Fulham started brightly and they went close to breaking the deadlock on 12 minutes when Adel Taarabt capitalised on a slip from Gael Clichy and drilled in a low left-footed shot which the returning Joe Hart did well to keep out.
A minute later City were inches away from scoring when Edin Dzeko teed up David Silva inside the box and he saw his shot come back off the crossbar.
Taarabt, who was playing as Fulham’s lone front man, was looking lively, and he had another sight of goal on 19 minutes, but his effort from the edge of the box was straight down the throat of Hart.
City broke the deadlock on 23 minutes with a sublime free-kick from set-piece specialist Toure. The big Ivorian brilliantly curled his free-kick from the edge of the box in off the underside of the crossbar past a stranded Maarten Stekelenburg after Steve Sidwell was adjudged to have fouled Silva.
Dzeko wasted a great opening to double City’s lead just past the half-hour mark when he saw his shot blocked inside the box when the unmarked Fernandinho was probably the better option for a pass.
Taarabt continued to offer Fulham their best hope of getting back into the contest and he fired in a shot which forced Hart to turn his effort round the post.
Dzeko had a chance to score on 35 minutes when Aleksandar Kolarov found him inside the box, but the striker’s low shot was well saved by Stekelenburg.
City doubled their advantage two minutes before the break when Vincent Kompany reacted quickest to prod home from close range after Martin Demichelis saw his header kept out by Stekelenburg.
City looked to put the game beyond Fulham at the start of the second half when Silva played in Kolarov down the left and then got on the end of his cross in the box, but on the stretch he could not generate the power on his shot to beat Stekelenburg.
Fulham reduced the arrears on 50 minutes when Taarabt beat Clichy down the left with a powerful run and crossed for the unmarked Richardson to sweep the ball home from close range.
The home side had their tails up and they fashioned a great chance to draw level on 57 minutes when Ashkan Dejagah sent over a deep cross from the right which Sidwell flung himself at to head wide when he would have been better off leaving it for the unmarked Taarabt.
The game was becoming stretched and substitute Navas wasted a great chance to score just past the hour mark when the ball broke to him inside the box, but the winger dragged his shot well wide of the target.
Fulham drew level on 68 minutes in the most bizarre of circumstances with a comical own goal from Kompany.
Sascha Riether got down the right from Scott Parker’s pass and fired over a cross which Kompany somehow sliced up into the air and over Hart before nestling into the corner of the net.
City regained the lead 12 minutes from time when Silva sent Navas racing clear and the winger drilled his shot through the legs of Stekelenburg much to the relief of Kompany after his own goal.
The visitors made the game safe seven minutes from time when Alvaro Negredo picked out substitute Milner with a brilliant pass with the outside of his foot and the midfielder swept the ball past Stekelenburg to give City all three points.