The prolific Slovakian prevailed at the end of the 190km stage from Indicatore (Arezzo) to Narni Scalo.
The Cannondale rider finished just ahead of Mark Cavendish (Omega Pharma - Quick-Step) and André Greipel (Lotto) to record his fourth win of the year after a pair of wins at the Tour of Oman and victory in the GP Città di Camaiore.
Britain's Cavendish was on Sagan's wheel but could not pull within half a bike's length as he missed out in a sprint for the second day in succession.
He does have the consolation of retaining the overall lead after his Belgian squad won Wednesday's opening team time trial.
Cavendish said: “Gert [Steegmans] brought me to the last 500m. I tried to get on Greipel’s wheel, but Sagan was already there. I started my sprint early, but someone always comes from behind so I tried to hold something back. Peter [Sagan] did really well.”
Garikoitz Bravo (Euskaltel), Cesare Benedetti (NetApp-Endura) and Francesco Failli (Vini Fantini-Selle Italia) were the break of the day.
They built up a lead of six minutes at the halfway stage as the peloton crossed the border from the region of Tuscany.
But their advantage was down to three minutes after the sole categorised climb of the day at the town of Todi after 120km and they were caught shortly after the last intermediate sprint in Narni after 166.5km.
From then on a bunch gallop to the line looked inevitable as the peloton did two short loops on wet roads and the sprinters' teams nullified a flurry of attacks.
And it was Sagan who confirmed his reputation as the man to beat at this year's opening Classic, Milan-San Remo with the victory.
He said: “I’m happy. It’s the first time I’ve been Mark Cavendish in my career, I think.
"There was a climb we rode hard and I think the sprinters felt it. In the final 500m Mark had no more lead-out men. I was on Greipel’s wheel, Mark went shoulder to shoulder with me but he was sporting and dropped in behind. It was good for me, anyway, not for him.”