2011-11-09 31 views
6

Chúng tôi đang tạo một ứng dụng web đa tennant, nơi chúng tôi xác định người thuê thông qua một tên miền phụ (customer1.ourapp.com, customer2.ourapp.com, v.v.).ASP.NET MVC. Tên miền phụ được hướng dữ liệu?

Thiết lập tên miền phụ phải được điều hướng dữ liệu - nghĩa là chúng tôi không muốn phải sửa đổi cấu hình IIS (theo cách thủ công hoặc theo chương trình) mỗi khi chúng tôi có được khách hàng mới.

Trong MVC đâu là nơi tốt nhất để kiểm tra xem một tên miền phụ trong một yêu cầu là hợp lệ (tức là subdomain tồn tại trong một số bảng trong cơ sở dữ liệu)

Một số tùy chọn Ive coi,

  1. OnActionExecuting trong bộ điều khiển
  2. trong một bộ lọc hành động tùy chỉnh
  3. mô-đun IIS
  4. là một phần của thiết lập định tuyến - một lớp đường tùy chỉnh mà biết về s hợp lệ ub-domains - tương tự như cách tiếp cận này - http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx

Tôi nghĩ rằng khái niệm này là một nhiệm vụ định tuyến để tùy chọn cuối cùng có vẻ đúng? tức là một yêu cầu với một tên miền phụ không tồn tại về cơ bản là một url không hợp lệ nên nó không khớp với một tuyến đường và thay vào đó sẽ rơi qua 404. Điều này cũng sẽ cho phép chúng tôi xác định rõ ràng các tuyến làm hoặc không yêu cầu tên miền phụ hợp lệ

+0

Tôi nghĩ rằng bạn có thể dễ dàng làm điều này với định tuyến MVC .. Bạn sẽ được yêu cầu thông tin từ [TẠI ĐÂY] (http://hanssens.org/post/ASPNET-MVC-Subdomain-Routing.aspx) –

Trả lời

1

Tôi sẽ tạo một bộ lọc hành động tùy chỉnh và đăng ký nó trên toàn cầu trong Global.asax (không phải lo lắng khi thêm bộ điều khiển mới).

Bạn cũng có thể xem xét tạo một tùy chỉnh MvcHandler và chỉ định nó khi khai báo tuyến đường. Điều này sẽ cho phép bạn chỉ định một vài tuyến (ví dụ: đối với nội dung tĩnh), có thể được chia sẻ giữa tất cả các máy khách.

Giải pháp khác là chỉ sử dụng định tuyến và dính vào một tên miền duy nhất, do đó bạn không phải loại bỏ chứng chỉ SSL đắt tiền cho miền ký tự đại diện.

1

Tôi đã làm như thế này trong Lớp điều khiển cơ sở của mình trước đây, tuy nhiên, như @Jakub cho biết, sử dụng tên miền phụ sẽ rất tốn kém nếu bạn hoặc khách hàng của bạn cần chứng chỉ SSL sau đó.

  var dotIndex = HostingEnvironment.SiteName.IndexOf('.'); 
      if (dotIndex > 0) 
      { 
       var subdomain = HostingEnvironment.SiteName.Substring(0, dotIndex); 
       customerCode = subdomain; 
      } 
Các vấn đề liên quan