He has appeared in film, television, the stage and on the radio. A graduate of LAMDA, his first movie appearance was as a constable in From Hell.
- The History Boys (2006) as Dakin
- Mamma Mia! (2008) as Sky
- An Education (2009) as Danny
- Marvel Cinematic Universe (2011 present) as Young Howard Stark:
- The Devil's Double (2011) as Uday/Latif
- My Week with Marilyn (2011) as Milton Greene
- Abraham Lincoln: Vampire Hunter (2012) as Henry Sturges
- Fleming: The Man Who Would Be Bond (2014) as Ian Fleming
- Dracula Untold (2014) as Mehmet II
- Preacher (2016 2019) as Jesse Custer
- Warcraft (2016) as King Llane Wrynn
- The Princess (2022) as Julius
Tropes invoked by this actor's works:
- Acting for Two: Portrayed Uday Hussein and Latif Yahia in The Devil's Double.
- Dawson Casting: Played a grammar school student in both the play and film versions of The History Boys when he was in his late 20s.
- Fake American: As Howard Stark in Captain America: The First Avenger and Agent Carter, Milton Greene in My Week with Marilyn, Darcy in Dead Man Down, Mitch in Reasonable Doubt, Dino in Need for Speed, McCoy in That Dirty Black Bag, and Jesse Custer in Preacher.
- Fake Nationality: Portrayed Uday Hussein and Latif Yahia in The Devil's Double and Mehmet II in Dracula Untold.
- Romance on the Set: Dated Amanda Seyfried for two years after they worked together in Mamma Mia!.
- Shirtless Scene: In The Devil's Double and Mamma Mia! amongst others. Actually it would almost be easier to list a movie where he does not at least take his shirt off.