After forcing Navy to punt on their opening possession, Edgar Poe returned a punt 50 yards to give Army excellent field position for a 32-yard field goal.
Navy quickly responded with a 58-yard touchdown run by senior Keenan Reynolds to take a 7-3 lead.
Freshman Tyler Campbell scored his first career touchdown run from 29 yards out to reclaim the lead for the Black Knights.
Reynolds would score his second rushing touchdown of the day from a yard out, setting a new Football Bowl Subdivision record for rushing touchdowns in the process.
The Black Knights would take a 17-14 lead before the end of the when Carter found Poe for a 39-yard touchdown pass.
Poe led the team and set career highs with 121 yards receiving and five receptions and was the first Army receiver to catch six touchdown passes in a season since 2007.
The Army defense gave Navy fits, at one point keeping them from converting eight consecutive third downs.
Carter would make a mistake late in the game when he overthrew pass turned into an interception for the Mids.
The Black Knights attempted some trickery, but Navy was not fooled when the double pass from DeAndre Bell was intercepted.
Army would get one final chance at a hail mary attempt, down four points with 11 seconds remaining, but Carter's pass fell incomplete in the end zone.
Carter threw for 208 yards, the first time an Army quarterback has eclipsed the 200 yard mark since Carson Williams in 2007.