Double Possible:
Est-il possible de faire une ASP.NET MVC itinéraire basé sur un sous-domaine?Dans asp.net MVC 3 site j'aimerais créer des boutiques en ligne pour les utilisateurs. N'importe quel magasin qui est créé par l'utilisateur doit avoir une URL du type "shopname.mydomain.com".
J'ai essayé un peu de routage de travail, mais a échoué à tous. Je suis à la recherche d'une solution, mais ne peut pas trouver de solution adéquate.
Mon but est que; si je peux ajouter un itinéraire à gérer toute demande qui tente de trouver un sous-domaine, je vais vérifier si c'est un utilisateur de la boutique en ligne de nom et d'obtenir la dynamique de données sur le jeu.
Besoin d'acheminement de l'aide :) Merci.
Réponses
Trop de publicités?J'ai trouvé un moyen très puissant. Afin de vérifier cela :)
Tout d'abord pour le développement d'applications serveur de visual studio, vous devez modifier le fichier hosts.
Ouvrez le bloc-notes en tant qu'administrateur. Ajouter un nom pour votre domaine, quelque chose comme
127.0.0.1 mydomain.com 127.0.0.1 sub1.mydomain.com
et ce dont vous avez besoin pour utiliser sur le développement.
Après le donner un numéro de port spécifique pour votre projet web. Par exemple "45499". De cette façon vous serez en mesure de sen demande à votre projet par écrit dans le navigateur :
mydomain.com:45499 ou sub1.mydomain.com:45499
C'était la préparation de l'étape. Permet de se rendre sur la réponse.
En utilisant l' IRouteConstraint
classe, vous pouvez créer votre itinéraire limite.
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;
}
}
Et d'ajouter votre contraindre à n'importe quel itinéraire vous souhaitez utiliser.
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" }
);
Mettre cette route avant de votre itinéraire par défaut. C'est tout.
Dans la contrainte que vous pouvez faire quelque chose comme vérifier pour le nom de sous-domaine est un client du nom du magasin ou quoi que ce soit.