Я делал так: в routes добавлял один параметер (domain).
routes.MapRoute(
"Default",
"${domain}/{controller}/{action}/{id}",
new { domain = "", controller = "Home", action = "Index", id = "" }
);
Вместо
$ подставляете любой символ, который Вы
не будете использовать в url. Таким образом мы добиваемся уникальности идентификатора domain. Потом, с помощью URL Rewrite Module for IIS 7, выставляем rewrite rules таким образом, чтобы запросы на поддомены редиректились на основной домен, в соответствии с указанным выше маршрутом (добавляем перед маршрутом
$). Я это сделал через GUI в админке IIS, поэтому кода предоставить не могу.