Ответ 1
Я нашел очень мощный способ. Поэтому проверьте это:)
Прежде всего, для сервера разработки приложений визуальной студии вам нужно отредактировать файл "hosts".
Откройте блокнот как администратор. Добавьте любое имя для своего домена что-то вроде
127.0.0.1 mydomain.com 127.0.0.1 sub1.mydomain.com
и что вам нужно использовать при разработке.
После этого укажите свой номер порта в своем веб-проекте. Например, "45499". Таким образом, вы сможете отправить запрос в свой проект, написав в браузере:
mydomain.com:45499 или sub1.mydomain.com:45499
Это был подготовительный шаг. Давайте ответим.
Используя класс IRouteConstraint
, вы можете создать свои ограничения маршрута.
public class SubdomainRouteConstraint : IRouteConstraint
{
private readonly string SubdomainWithDot;
public SubdomainRouteConstraint(string subdomainWithDot)
{
SubdomainWithDot = subdomainWithDot;
}
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
var url = httpContext.Request.Headers["HOST"];
var index = url.IndexOf(".");
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.
var sub = url.Split('.')[0];
if(sub == "www" || sub == "yourdomainname" || sub == "mail")
{
return false;
}
//Add a custom parameter named "user". Anything you like :)
values.Add("user", );
return true;
}
}
И добавьте свой ограничитель в любом маршруте, который вы хотели бы использовать.
routes.MapRoute(
"Sub", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "SubdomainController", action = "AnyActionYouLike", id = UrlParameter.Optional },
new { controller = new SubdomainRouteConstraint("abc.") },
new[] { "MyProjectNameSpace.Controllers" }
);
Поместите эти маршруты до вашего маршрута по умолчанию. Это все.
В ограничении вы можете делать что-либо вроде проверки для имени поддомена - это имя магазина клиента или что-то еще.