tôi đã cố gắng rất nhiều trong những giải pháp được đề cập trên các chủ đề khác và thấy mọi thứ trở nên quá phức tạp rất nhanh chóng. Nó có vẻ như ASP.Net MVC muốn bạn sub-class Route để làm điều này loại định tuyến tiên tiến, nhưng nó dường như không bao giờ làm việc cho tôi. Tôi đã không bao giờ có thể có được một tên miền để ánh xạ tới một không gian tên, vì vậy tôi vết thương với ngoại lệ "điều khiển không rõ ràng" (kể từ khi tôi đã có một bộ điều khiển nhà ở cả hai không gian tên).
Cuối cùng, tôi đã sử dụng một ràng buộc để trỏ các tên miền phụ đến các không gian tên.
Đây là giao diện của tuyến đường của tôi. Lưu ý rằng tuyến đường này là dành cho "api". 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" }
);
Đây là "SubdomainRouteConstraint" lớp tham chiếu ở trên:
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);
}
}
Đó rõ ràng là khá một hack, nhưng tôi thực sự hài lòng với cách đơn giản nó đã kết thúc.
Bạn có thể dễ dàng tweek mã này để ánh xạ động một tên miền phụ đến một khu vực, nhưng tôi chỉ có hai khu vực để tôi chỉ đăng ký từng khu vực riêng biệt. Thêm vào đó điều này mang lại cho tôi sự tự do để có định tuyến khác nhau bên trong từng khu vực.
@mynameiscoffey, bạn đã thành công trong việc này chưa? Tôi có cùng một nhiệm vụ. –