2009-09-06 29 views
5

Đối với phần mềm Asp.Net như một ứng dụng dịch vụ, tôi muốn làm các tên miền phụ dựa trên tài khoản như Basecamp và phần còn lại của các sản phẩm 37Signals có. Ví dụ. acme.myapp.com sẽ tải tài khoản cho khách hàng đó và chỉ lấy lại thông tin của họ.Làm cách nào để thực hiện các tài khoản kiểu Basecamp trong Asp.Net Mvc?

Điều này rất dễ thực hiện trong Ruby on Rails, nhưng làm cách nào bạn xử lý chức năng này trong ASP.NET MVC và có thể mở rộng tới hàng trăm tài khoản?

Trả lời

1

Chúng tôi sử dụng:

public static string GetSubDomain() 
     { 
      string subDomain = String.Empty; 

      if (HttpContext.Current.Request.Url.HostNameType == UriHostNameType.Dns) 
      { 
       subDomain = Regex.Replace(HttpContext.Current.Request.Url.Host, "((.*)(\\..*){2})|(.*)", "$2"); 
      } 

      if (subDomain.Length == 0) 
      { 
       subDomain = "www"; 
      } 

      return subDomain.Trim().ToLower(); 
     } 
1

Nó không phải là rất khác so với RoR. Chỉ cần lấy HTTP-Request, lấy Host-Value, chia nó ra (tại mỗi dấu chấm) và lấy phần đầu tiên để lấy subdomain.

string subdomain = requestContext.HttpContext. 
         Request.Headers["Host"].Split('.')[0]; 

Sau đó, chỉ giải quyết tên miền phụ cho tài khoản Công ty.

2

Maarten Balliauw's blog bao phủ một phương pháp mở rộng RouteBase. Tôi nghĩ rằng tôi cũng đã nhìn thấy một xử lý tuyến đường tùy chỉnh được sử dụng cho việc này.

Ngoài ra, điều này StackOverflow question bao gồm cùng một câu hỏi, sử dụng một cách tiếp cận đơn giản hơn.

Tôi chắc chắn khuyên bạn nên tính toán mã này vào bên định tuyến thay vì nhúng logic để lấy thông tin miền trong bộ điều khiển của bạn.

Các vấn đề liên quan