Joe Saunders went the distance for the Mariners, but his wild pitch in the sixth inning allowed Mike Trout to score the only run of the game.
Wilson (6-5) walked two and struck out three while throwing 113 pitches. He gave up an infield single to Kendrys Morales leading off the second and another leadoff single to Kyle Seager in the seventh.
Scott Downs worked a perfect eighth inning in relief of Wilson and Ernesto Frieri turned in a 1-2-3 ninth for his 16th save.
Saunders (5-7) surrendered six hits in what was his second complete game of the season and the ninth of his nine-year career.