Ich habe eine Menge der auf anderen Threads erwähnt Lösungen ausprobiert und fand Dinge zu kompliziert sehr schnell bekommen. Es scheint so, als ob ASP.Net MVC möchte, dass Sie Route unterteilen, um diese Art von fortgeschrittenem Routing durchzuführen, aber es schien nie für mich zu funktionieren. Ich war nie in der Lage, eine Domain auf einen Namespace zu mappen, also endete ich mit "mehrdeutigen Controller" -Ausnahmen (da ich in beiden Namespaces einen Home-Controller hatte).
Letztendlich habe ich eine Einschränkung verwendet, um Subdomänen auf Namespaces zu verweisen.
So sieht meine Route aus. Beachten Sie, dass diese Route für die "api" ist. Sub-Domain:
context.MapRoute(
"Api_Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = new SubdomainRouteConstraint("api.") },
new[] { "BendyTree.CloudSpark.Areas.Api.Controllers" }
);
Hier ist die "SubdomainRouteConstraint" Klasse oben verwiesen:
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)
{
return new Regex("^https?://" + SubdomainWithDot).IsMatch(httpContext.Request.Url.AbsoluteUri);
}
}
Es ist natürlich ein ganz Hack, aber ich bin wirklich glücklich mit, wie einfach es endete.
Sie könnten diesen Code einfach zwicken, um eine Subdomain dynamisch einem Bereich zuzuordnen, aber ich habe nur zwei Bereiche, also registriere ich jeden Bereich separat. Außerdem gibt mir das die Freiheit, in jedem Bereich unterschiedliche Routen zu haben.
@mynameiscoffey, ist Ihnen das gelungen? Ich habe genau die gleiche Aufgabe. –