Search code examples
asp.net-mvcroutesasp.net-mvc-routing

Is it possible to make an ASP.NET MVC route based on a subdomain?


Is it possible to have an ASP.NET MVC route that uses subdomain information to determine its route? For example:

  • user1.domain.example goes to one place
  • user2.domain.example goes to another?

Or, can I make it so both of these go to the same controller/action with a username parameter?


Solution

  • You can do it by creating a new route and adding it to the routes collection in RegisterRoutes in your global.asax. Below is a very simple example of a custom Route:

    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;
        }
    }