Despite large spells of possession, Manchester City took the lead in a less conventional Pep Guardiola goal by capitalising on a mistake in midfield. A poor pass from Emre Can allowed a lightning-quick counterattack, ending with Kevin De Bruyne sweeping the ball home past a helpless Marwim Hitz.
There was another contentious moment minutes after a City penalty call, as Jude Bellingham chased down a bad touch from Ederson, leaving the Brazilian keeper stranded outside his area.
The teenager, signed from Birmingham City, turned to wheel away in celebration as he strolled the ball into an empty net, only to see a yellow card given to him and Ederson in a heap on the floor. A huge let-off for City.
In a game that should have been dead and buried, Marco Reus gave Dortmund an all-important away goal in the last ten minutes. Erling Haaland, who most Citizens were worried about coming into the game, flicked a pass round the corner for the German veteran to sweep home.
Dortmund thought they were coming away from the Etihad with a draw, and an away goal, but Phil Foden had other ideas as he tucked away his 12th goal of the season in all competitions, giving City the lead for the reverse fixture.
With De Bruyne's early opener, Man City had scored 18 goals since last conceding in the Champions League; the longest run of unanswered goals in the competition's history.
The one conceded goal, up until Reus slotted the equaliser on Tuesday night, came against FC Porto in the group stage. Luis Diaz made an impact on City following a mistake, but Guardiola's men still managed to turn the tie around.
This means that Reus' goal was the first goal conceded by City since October. The Ruben Dias & John Stones partnership really was in full swing.
Another impressive record is that of Foden's. The 20-year-old is now the youngest Englishman to score a 90th-minute winning goal in a Champions League match, overtaking Wayne Rooney versus AC Milan in April 2007.
Showcase for future City star?
The biggest rumour being talked about now is about where Haaland will be playing next season.
The betting websites have the blue side of Manchester down as the favourites, with Haaland's father, Alf-Inge Haaland, once playing for the club between 2000 and 2003. The former Norwegian player signed from Leeds United for £2.5million but saw his career cut short after having surgery on his knee.
Alf-Inge scored three times in 38 appearances, and developed a love for the club over the three years he was there - one of the reasons people believe Haaland may end up at City next season.
Haaland has been on many clubs' radars for the past couple of seasons, with the striker recording a goal or assist every 67 minutes in all competitions for Dortmund.
This season has not been a one-off either. Last season, he recorded a goal or assist every 51 minutes in all competitions for RB Salzburg and Dortmund.
With the departure of Sergio Agüero at the end of the season, the £150million-rated man could be a perfect fit for this City side. Citizens will just be hoping that the young talent does not punish City in the reverse fixture, after missing multiple chances to put the tie out of sight.
Moments before the Bellingham incident, Rodri was adjudged to have won a penalty after taking a boot to the face from Can. The Spaniard went down holding his face after stooping to get on the end of a whipped cross.
However, replayed showed that there was no contact between boot and face, but rather a nick on his knee on after heading the ball out for a throw-in. So it seemed that VAR had gone against the referee's decision, and rightly so.
Social media blew up once the Bellingham goal for Dortmund was ruled out.
Bellingham had passed the ball into an empty net after dispossessing the City keeper, and seemed to have a tap-in to equalise for Dortmund, getting a crucial away goal for the German side.
It was only until he turned around, that it became clear Bellingham was being punished for his 'challenge' on Ederson and the goal was being disallowed.
Another away goal for Dortmund could have been crushing for City, especially because of the way in which the home side dominated and wasted mutliple chances to close the game off.
The reverse fixture could be a very tense one, and many neutrals will be critical of refereeing decisions for the second leg in Germany.
Can City bring the win back to Manchester next week?