From Food Network
8 ounces whole-wheat elbow pasta
2 tablespoons unsalted butter
2 medium shallots, finely chopped (about 1/3 cup)
3 cloves garlic, finely minced
3 tablespoons all-purpose flour
1/2 cup skim milk
1/3 cup reduced-fat sour cream
1 cup lightly packed shredded part-skim mozzarella
2/3 cup lightly packed shredded low-fat Swiss cheese
1/4 cup lightly packed grated Parmesan
One 6-ounce bag baby spinach (about 6 heaping cups)
One 9-ounce box frozen artichoke hearts, thawed and roughly chopped
Kosher salt and freshly ground black pepper
Position an oven rack at the center of the oven, and preheat the broiler.
Bring a large pot of water to a boil and cook the pasta according to the package instructions. Reserve 3/4 cup of the pasta water; strain the pasta.
Wipe out the pot. Add the butter, and melt over medium heat. Add the shallots, and cook, stirring occasionally, until soft, 2 to 4 minutes. Add the garlic, and cook, stirring, until soft, about 2 minutes. Add the flour, and whisk constantly until it begins to toast, about 2 minutes. (The flour will form a thick paste, but that’s okay; just keep it moving in the pot.) Whisk in the milk and the reserved pasta water, and whisk constantly until the mixture is thick like gravy, 3 to 5 minutes. Whisk in the sour cream, 2/3 cup of the mozzarella, the Swiss cheese and 1 tablespoon of the Parmesan. Once the cheeses have melted, add the spinach, and cook until just wilted, about 1 minute. Stir in the artichoke hearts, pasta, 1 teaspoon salt and 1/4 teaspoon pepper.
Transfer to a broiler-safe 2-quart baking dish.
Stir together the remaining 1/3 cup mozzarella and 3 tablespoons Parmesan in a small bowl. Sprinkle over the pasta. Broil until golden and bubbly, about 2 minutes.