Skip to content

Instantly share code, notes, and snippets.

@willnss
Forked from RyannosaurusRex/RouteConfig.cs
Created July 11, 2013 13:01
Show Gist options
  • Save willnss/5975240 to your computer and use it in GitHub Desktop.
Save willnss/5975240 to your computer and use it in GitHub Desktop.
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Sub", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "SubdomainController", action = "AnyActionYouLike", id = UrlParameter.Optional },
new { controller = new SubdomainRouteConstraint() },
new[] { "MyProjectNameSpace.Controllers" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
public class SubdomainRouteConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values,
RouteDirection routeDirection)
{
string url = httpContext.Request.Headers["HOST"];
int index = url.IndexOf(".", System.StringComparison.Ordinal);
if (index < 0)
{
return false;
}
//This will bi not enough in real web. Because the domain names will end with ".com",".net"
//so probably there will be a "." in url.So check if the sub is not "yourdomainname" or "www" at runtime.
string sub = url.Split('.')[0];
if (sub == "www" || sub == "yourdomainname" || sub == "mail")
{
return false;
}
//Add a custom parameter named "user". Anythink you like :)
values.Add("subdomainAsAParameter", sub);
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment