pesquisa baseada conta no ASP.NET

votos
5

Eu estou olhando para usar ASP.NET para um novo serviço SaaS, mas por amor de mim, eu não consigo descobrir como fazer de conta pesquisas com base em subdomínios, como a maioria das aplicações de SaaS (por exemplo 37Signals) fazer.

Por exemplo, se eu oferecer yourname.mysite.com, então como é que eu use ASP.NET MVC (especificamente) para extrair o subdomínio para que eu possa carregar o modelo direito (exibindo o nome da sua empresa e outros)? isso pode ser feito com encaminhamento regular?

Esta parece ser uma coisa comum em SaaS de modo que tem que haver uma maneira fácil de fazê-lo em ASP.NET; Eu sei que existem plugins que fazem isso para outros frameworks como Ruby on Rails.

Publicado 09/12/2008 em 17:59
fonte usuário
Em outras línguas...                            


4 respostas

votos
3

Isso funciona para mim:

    //--------------------------------------------------------------------------------------------------------------------------
    public string GetSubDomain()
    {
        string SubDomain = "";

        if (Request.Url.HostNameType == UriHostNameType.Dns)
            SubDomain = Regex.Replace(Request.Url.Host, "((.*)(\\..*){2})|(.*)", "$2");
        if (SubDomain.Length == 0)
            SubDomain = "www";
        return SubDomain;
    }

Estou assumindo que você gostaria de lidar com múltiplas contas dentro da mesma aplicação web ao invés de construir locais separados usando as ferramentas no IIS. Em nosso trabalho, nós começamos a criação de um novo site para cada subdomínio, mas descobriram que esta abordagem não escala bem - especialmente quando você lançar uma atualização e depois ter de modificar dezenas de sites! Assim, eu recomendo essa abordagem em vez das técnicas orientadas para o servidor sugerido acima com base em vários anos no valor de experiência fazendo exatamente o que você propõe.

O código acima apenas certifica-se de que este é um URL totalmente formada (em vez, por exemplo, do que um endereço IP) e retorna o subdomínio. Tem funcionado bem para nós em um ambiente bastante high-volume.

Respondeu 15/12/2008 em 15:22
fonte usuário

votos
2

Você deve ser capaz de pegar isso do ServerVariables coleção, mas primeiro você precisa configurar o IIS e DNS para funcionar corretamente. Então você sabe 37Signals provavelmente usar o Apache ou outro código aberto, servidor web unix. No Apache este é referido como hospedagem virtual .

Para fazer isso com o IIS você precisa criar uma nova entrada DNS (criar um CNAME yourname.mysite.com para application.mysite.com) para cada domínio que aponta para a sua aplicação no IIS (application.mysite.com).

Você, então, criar uma entrada de cabeçalho de anfitrião na aplicação IIS (application.mysite.com) que irá aceitar o cabeçalho yourname.mysite.com. Os usuários vão realmente acertar application.mysite, com mas o endereço é o subdomínio personalizado. Você, então, acessar a coleção ServerVariables para obter o valor para decidir sobre como personalizar o site.

Nota: existem várias implementações alternativos você pode seguir dependendo dos requisitos.

  • Lidar com o processamento de cabeçalho de host em um balanceador de carga de hardware (mais prováveis ​​37Signals fazer isso, do que confiar no servidor web), e criar um cabeçalho HTTP personalizado para passar para a aplicação web.
  • Crie um novo aplicativo web e de cabeçalho de anfitrião para cada aplicação individual. Esta é provavelmente uma implementação ineficiente para um grande número de usuários, mas poderia oferecer um melhor isolamento e segurança para algumas pessoas.
Respondeu 09/12/2008 em 18:22
fonte usuário

votos
1

Você precisa configurar o DNS para suportar subdomínios de curinga. Isso pode ser feito através da adição de um registro A apontando para seu endereço de IP, como este:

* A 1.2.3.4

Uma vez que o seu feito, o que você digita antes de seu domínio será enviado para o seu domínio raiz, onde você pode obter através da divisão da variável de servidor HTTP_HOST, como o usuário buggs disse acima:

 string user = HttpContext.Request.ServerVariables["HTTP_HOST"].Split(".")

//use the user variable to query the database for specific data

PS. Se você estiver usando uma hospedagem compartilhada você provavelmente vai ter que por um addon Único IP a partir deles, uma vez que é obrigatório para os domínios curinga para trabalhar. Se você estiver usando uma hospedagem dedicada que você já tem o seu próprio IP.

Respondeu 05/01/2009 em 23:36
fonte usuário

votos
0

A maneira que eu tenho feito é com HttpContext.Request.ServerVariables [ "HTTP_HOST"]. Split ( "").

Deixe-me saber se você precisar de mais ajuda.

Respondeu 15/12/2008 em 15:19
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more