2011-11-09 18 views
6

Estamos creando una aplicación web multinivel donde identificamos a los inquilinos a través de un subdominio (cliente1.ourapp.com, cliente2.ourapp.com, etc.).ASP.NET MVC. Subdominios conducidos por datos?

La configuración de los subdominios tiene que estar basada en datos, es decir, no queremos tener que modificar la configuración de IIS (manual o programáticamente) cada vez que recibimos un nuevo cliente.

En MVC, donde es el mejor lugar para comprobar que un subdominio en una solicitud es válida (es decir, existe el subdominio de alguna tabla en la base de datos)

Algunas opciones que he considerado,

  1. OnActionExecuting en el controlador
  2. En un filtro de acción personalizada
  3. módulo de IIS
  4. Como parte de la configuración de enrutamiento - una clase de ruta personalizada que sabe acerca de los s válidos ub-domains - similar a este enfoque - http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx

Creo que conceptualmente esta es una tarea de enrutamiento por lo que la última opción parece correcta ?? es decir, una solicitud con un subdominio que no existe es esencialmente una url no válida, por lo que no debería coincidir con una ruta y debería caer en 404. Esto también nos permitiría definir explícitamente rutas que requieren o no requieren un subdominio válido

+0

Creo que se puede hacer esto fácilmente con el enrutamiento MVC .. Usted recibirá información requerida desde [aquí] (http://hanssens.org/post/ASPNET-MVC-Subdomain-Routing.aspx) –

Respuesta

1

Crearía un filtro de acción personalizado y lo registraría globalmente en Global.asax (sin preocupaciones cuando agregue nuevos controladores).

También puede considerar crear un MvcHandler personalizado y especificarlo al declarar rutas. Esto le permitirá especificar algunas rutas (es decir, para contenido estático), que se pueden compartir entre todos los clientes.

Otra solución es utilizar solo el enrutamiento y adherirse al dominio individual, para que no tenga que desembolsar el costoso certificado SSL para el dominio comodín.

1

Lo estaba haciendo así en mi Base Controller Class antes, sin embargo, como dijo @Jakub, usar el subdominio será costoso si usted o su cliente necesitan un certificado SSL a partir de entonces.

  var dotIndex = HostingEnvironment.SiteName.IndexOf('.'); 
      if (dotIndex > 0) 
      { 
       var subdomain = HostingEnvironment.SiteName.Substring(0, dotIndex); 
       customerCode = subdomain; 
      }