VaryByParam работает только со строкой запроса, когда HTTP-метод равен GET, и параметрами (то есть значениями в форме и строке запроса), когда HTTP-метод является POST. Если вы не используете строку запроса для маршрутизации, я не думаю, что она будет работать.
Пожалуйста, ознакомьтесь с документацией @ OutputCache.
http://msdn.microsoft.com/en-us/library/hdxfb6cy.aspx
Возможно, вы можете написать собственное кэширование с использованием C # в коде позади страницы вместо того, чтобы полагаться на @ OutputCache.