Можно сделать это путем создания нового маршрута и добавления его к набору маршрутов в RegisterRoutes в global.asax. Ниже очень простой пример пользовательского Маршрута:
public class ExampleRoute : RouteBase
{
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var url = httpContext.Request.Headers["HOST"];
var index = url.IndexOf(".");
if (index < 0)
return null;
var subDomain = url.Substring(0, index);
if (subDomain == "user1")
{
var routeData = new RouteData(this, new MvcRouteHandler());
routeData.Values.Add("controller", "User1"); //Goes to the User1Controller class
routeData.Values.Add("action", "Index"); //Goes to the Index action on the User1Controller
return routeData;
}
if (subDomain == "user2")
{
var routeData = new RouteData(this, new MvcRouteHandler());
routeData.Values.Add("controller", "User2"); //Goes to the User2Controller class
routeData.Values.Add("action", "Index"); //Goes to the Index action on the User2Controller
return routeData;
}
return null;
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
//Implement your formating Url formating here
return null;
}
}
Да, но необходимо создать собственный обработчик маршрутов.
Обычно маршрут не знает о домене, потому что приложение могло быть развернуто на любом домене, и маршрут не будет заботиться так или иначе. Но в Вашем случае Вы хотите основывать контроллер и действие от домена, таким образом, необходимо будет создать пользовательский маршрут, который знает о домене.
Это не моя работа, но у меня чтобы добавить это к этому ответу.
Вот отличное решение этой проблемы. Маартин Баллиау написал код, который создает класс DomainRoute, который можно использовать аналогично обычной маршрутизации.
http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx
Пример использования будет таким ...
routes.Add("DomainRoute", new DomainRoute(
"{customer}.example.com", // Domain with parameters
"{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
))
;
{ {1}}