Listen to this article
Dalla Porta and his teammate Marcos Ramirez were both in victory contention throughout the race, but Canet took the lead at Turn 1 of the last lap.
Canet was outside the top 10 for most of the race, running only 12th on lap 20 of 27, but carved his way through the field during the latter stages.
The Max Racing KTM rider first led on the last lap but Dalla Porta stayed close to him, and pulled off an overtake at the penultimate corner.
Ramirez also made his way past Canet at the same place to complete a Leopard 1-2 with Canet rounding out the podium places.
Dalla Porta, who had finished second four times in 2019 prior to this weekend, also took the championship lead from Canet, but only by two points.
Snipers Honda rider Romano Fenati was in the top group for the whole race and took his best finish of the season in fourth. Raul Fernandez (Angel Nieto KTM) was the top rookie in fifth with John McPhee (Petronas Honda) taking sixth.
Japanese trio Ai Ogura (Honda Team Asia), Tatsuki Suzuki (SIC58 Honda) and polesitter Ayumu Sasaki (Petronas) finished seventh, eighth and ninth respectively with Jakub Kornfeil (PrustelGP KTM), a race leader early on, completing the top 10.
Alonso Lopez crashed three corners into the race with Gabriel Rodrigo unable to avoid him, while Tom Booth-Amos crashed a lap later at the same turn.
Kaito Toba and Albert Arenas crashed at the same time at Turn 1 in two separate incidents while both Sky VR46 riders Celestino Vietti and Dennis Foggia, as well as Darryn Binder, crashed on the last lap.
|1||Lorenzo Dalla Porta||Honda||27||39'29.348|
|24||Tom Booth-Amos||KTM||26||39'47.226||1 Lap|
|Dennis Foggia||KTM||26||38'02.963||1 Lap|
|Celestino Vietti Ramus||KTM||26||38'03.086||1 Lap|
|Darryn Binder||KTM||26||38'03.146||1 Lap|
|Kaito Toba||Honda||18||27'11.314||9 Laps|
|Gabriel Rodrigo||Honda||5||10'03.889||22 Laps|
|View full results|
Assen Moto3: Arbolino scores win with last-lap move
Brno Moto3: Canet takes points lead with win