City took the lead when Adrian Luna steered Craig Noone's delivery home with an exquisite first touch and in the 31st minute Jamie Maclaren dinked a brilliant finish over Mark Birighitti to put the visitor in control at Central Coast Stadium.
The Mariners pulled one back before half-time, though, Jaden Casella tapping in his first A-League goal after being teed up by captain Matt Simon.
Simon was making his 200th A-League appearance for the Mariners and, after drawing a foul from Nathaniel Atkinson in the box, he drilled the resulting penalty into the bottom-left corner to restore parity.
The host's chances of staging an unlikely turnaround were boosted by Kerrin Stokes receiving a second yellow card in the 60th minute, and De Silva got the job done with a thumping finish 10 minutes from time.
The Mariners moved three points clear of Brisbane Roar at the summit, though they have played two games more. City, runner-up in last season's Grand Final, sits eighth after a third defeat of the season.