Norris graduated from Goddard High School in Goddard, Kansas in 2007. At Goddard High, Norris played third base before transitioning to catcher, and also won a Class 6A Championship title. RISE Magazine named Norris its 2006–2007 Kansas Baseball Player of the Year. He committed to attend Wichita State University on a baseball scholarship.
The Washington Nationals selected Norris in the fourth round of the 2007 Major League Baseball draft.
Norris spent the 2007 season with the GCL Nationals, Washington's affiliate in the rookie-level Gulf Coast League. He played for the Vermont Lake Monsters of the New York–Penn League in 2008, the Hagerstown Suns of the Class-A South Atlantic League in 2009, the Potomac Nationals of the Class-A Advanced Carolina League in 2010, and the Harrisburg Senators of the Class-AA Eastern League in 2011. Baseball America rated Norris the 38th best prospect in baseball prior to the 2010 season and the 72nd best prospect in baseball prior to the 2011 season. He was also chosen as the Nationals' second best prospect prior to the 2011 season.
On December 23, 2011, the Nationals traded Norris, A. J. Cole, Tommy Milone, and Brad Peacock to the Oakland Athletics for Gio González and Robert Gilliam.
Norris made his MLB debut for the A's on June 21, 2012. He was called up to be a backup catcher behind the offensively struggling Kurt Suzuki. He went 0 for 3 but made a key defensive play in the 9th inning throwing out Dodgers Dee Gordon attempting to steal second base. On June 24, 2012, in the bottom of the 9th inning on a full count and the A's trailing 2–1, he hit his first career home run, a walk-off 3-run homer that helped the A's sink the San Francisco Giants, 4–2. When Suzuki was traded to the Washington Nationals on August 3, Norris became the primary catcher for the A's, backed up by the newly acquired George Kottaras. Norris finished the 2012 season batting .201 with 7 home runs in 209 at-bats and 53 starts at catcher.
In 2013, Norris was the primary catcher in a catching platoon, backed up by left-handed hitters John Jaso and Stephen Vogt. Norris missed portions of August and September with a broken toe. He started 71 games at catcher and played in 98 games overall, hitting for a .246 batting average with 9 home runs and 30 runs batted in.
Norris was selected as an All-Star in 2014. He hit .270 with 10 home runs in 385 at-bats, making 93 starts at catcher with John Jaso as a back-up.
On December 18, 2014, the Athletics traded Norris and Seth Streich to the San Diego Padres in exchange for R. J. Alvarez and Jesse Hahn. Norris played in a career high 147 games in 2015, including 116 starts at catcher and 15 starts at first base. Despite moving to the National League, Norris racked up career highs in runs, RBIs, and home runs. Defensively, he threw out 34% of would-be basestealers and his pitch-framing was reported to be much improved from previous years.
In 2016, Norris struggled at the plate, posting a career low .186 batting average. Norris finished the season with 14 home runs, tying a career high, and 42 RBI. Despite the Padres pushing to trade Norris at the July 31 deadline, Norris remained with the team.
On December 2, 2016, the Washington Nationals acquired Norris from the Padres in exchange for Pedro Avila. Norris and the Nationals avoided arbitration over the winter, agreeing to a $4.2 million contract for 2017. After the team signed free agent catcher Matt Wieters, the Nationals reportedly attempted to trade Norris but were unable to find a taker. The Nationals granted Norris his unconditional release on March 15, 2017, rendering him a free agent eligible to sign with any team and allowing the team to pay only one-sixth of Norris' 2017 salary.
On March 25, 2017, Norris signed a one-year contract with the Tampa Bay Rays. He was designated for assignment on June 23, 2017 and released two days later. On September 1, 2017, Norris was suspended for the remainder of the 2017 season for violating MLB's domestic violence policy.