The Tinkoff rider finished the 201km event, a 16 lap Quebec City street circuit, ahead of Rio 2016 Olympic champion Greg Van Avermaet (BMC) and FDJ’s Anthony Roux.
"There was some headwind in the last stretch and everybody who attacked at the end found it very hard. Rigoberto Uran tried the same as last year but it was different this time," Sagan said.
"The last three kilometres were very fast and when I saw Rigoberto in the front I told myself maybe we're going to sprint for second place. But there was a very fast sprint from Anthony Roux, he started early and pulled a good sprint for me."
Matt Brammeier (Dimension Data) surged from the gun to lead a group of six escapees. He was rapidly joined by Lars Bak (Lotto-Soudal), Maxim Belkov (Katusha), Valerio Agnoli (Lampre-Marida), Twan Castelijns (LottoNL-Jumbo), and Alexandre Pichot (FDJ).
At the end of the first lap, the six had been joined by Jan Barta (Bora Argon 18) and Team Canada's Nicolas Masbourian and the lead went to over two minutes after 15km before settling at over four minutes after 30km.
In the leading group, Castelijns and Masbourian battled it out for the first KOM points. The peloton was then content with controlling the break, trimming the gap down to two minutes with five laps and 60km to go.
"I'm surprised because I didn't really prepare for theses races. After the Tour de France I trained for the mountain bike in Rio and then I was sick," - Peter Sagan.
The tempo raised on Lap 13, when Bak decided to go on his own while Castelijns and Belkov were pulled back by the peloton, followed by the rest of the breakaway group.
With 4km to go, Bak was reined in by Julian Alaphilippe (Etixx-QuickStep) and Luke Rowe (Sky) as the peloton split in several groups. The duo stayed in the front for less than a lap before being brought back in the last 25km.
The attacks kept coming with Matej Mohoric (Lampre-Merida) attempting to go on his own but failing. Attacks also came from Paul Voss (Bora Argon 18) and Oliver Naesen (IAM Cycling).
In the last two kilometers, Alaphilippe again tried his luck, this time aided by team-mate Matteo Trentin and Sky's Gianni Moscon, who went on to win the KOM classification.
The three were also reeled in as last year's winner Rigoberto Uran (Cannondale) attacked in a last gasp attempt to retain his title.
But Uran was 100 metres short of becoming the first man to defend a Quebec crown. The pack was hard on his wheel as Sagan proved far too strong for him and the rest of the field.