Sagan, fresh from winning the green jersey at the Tour de France, manoeuvred himself into the perfect position before striking for home to win by four seconds.
Several breakaway attempts, including one from Tour de France champion Chris Froome, were foiled by Sagan on the final 12 kilometre lap before the Slovakian flew away from the field.
Simone Ponzi (Astana) finished second ahead of home favourite Ryder Hesjedal (Garmin).
1. Peter Sagan (Slovakia / Cannondale) 5:20:07"
2. Simone Ponzi (Italy / Astana) +4"
3. Ryder Hesjedal (Canada / Garmin)
4. Greg Van Avermaet (Belgium / BMC Racing) +7"
5. Filippo Pozzato (Italy / Lampre)
6. Rui Costa (Portugal / Movistar)
7. Enrico Gasparotto (Italy / Astana)
8. Lars Petter Nordhaug (Norway / Belkin) +9"
9. Jon Izagirre (Spain / Euskaltel)
10. Jan Bakelants (Belgium / RadioShack)