Próbowałem wiele rozwiązań wymienionych na innych wątków i okazało się zbyt skomplikowane rzeczy bardzo szybko. Wygląda na to, że ASP.Net MVC chce, abyś podklasy Route wykonywał tego rodzaju zaawansowane routing, ale nigdy nie sprawdziło się to dla mnie. Nigdy nie udało mi się uzyskać domeny do mapowania do przestrzeni nazw, więc skończyłem z wyjątkami "niejednoznacznego kontrolera" (ponieważ miałem kontroler domowy w obu przestrzeniach nazw).
Ostatecznie użyłem ograniczenia do wskazania subdomen do przestrzeni nazw.
Oto, jak wygląda moja trasa. Zauważ, że ta trasa jest dla "api". subdomena:
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" }
);
Oto klasa „SubdomainRouteConstraint” mowa powyżej:
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);
}
}
To oczywiście dość hack, ale jestem bardzo zadowolony z tego, jak skończyło się to proste.
Możesz łatwo napisać ten kod, aby dynamicznie mapować subdomenę do obszaru, ale mam tylko dwa obszary, więc rejestruję każdy obszar osobno. Dodatkowo daje mi to możliwość różnych tras w każdym obszarze.
@mynameiscoffey, czy udało ci się to? Mam dokładnie to samo zadanie. –