Move most of Request logic into middleware