Nigel Robertha gave the Red-and-Black a ninth-minute lead and the visitors carried that through pretty much the entire game until substitute Keaton Parks leveled in the 84th minute and Thiago Andrade won it in the fifth minute of stoppage time.
Story of the match
The Boys in Blue had a chance inside the first minute as Maxi Moralez intercepted a pass from D.C. United goalkeeper Bill Hamid and he found Valentin Castellanos who was quickly closed down and saw his shot deflect behind for a corner.
Two minutes later, the Red-and-Black were in front. A quick counterattack found Robertha in space and he fired past Johnson high and to the near post.
Maxime Chanot had a chance to level on 16 minutes from a Moralez free-kick, but he couldn't keep his header down. Jesus Medina was then forced off late in the first half with a knee injury, replaced by Thiago.
Moralez then had another free-kick to the right of the Red-and-Black penalty area, but his cross landed on the chest of Chanot and went out for a goal kick.
Thiago was proving to be a handful for the D.C. United defense and in the 62nd minute, he laced a shot after cutting in from the left. Johnson then saved from Russell Canouse before NYCFC made another push.
In the 80th minute, a diagonal ball to Anton Tinnerholm gave the Swede time to find Rodriguez, but his effort was easily stopped by Hamid.
Two minutes later, Acevedo headed a cross from Gudi Thorarinsson and the breakthrough finally came when a near-post corner by Moralez was flicked home by Parks.
The buildup for the match-winner was started by Johnson, who gathered in a corner and released Thiago, who went from deep in his own half to the D.C. United end and he side-footed past Hamid to give the Boys In Blue a memorable win.
Man of the match: Thiago Andrade
In just his third MLS match, the Brazilian showcased his speed, going end-to-end and his ability to finish. He not only gave the Boys In Blue a dramatic victory, but showed why thr club signed him.