Счет поиска на основе в ASP.NET

голоса
5

Я смотрю на использование ASP.NET для нового сервиса SaaS, но любовь меня я не могу показаться, чтобы выяснить, как сделать счета Lookups на основе субдоменов, как и большинство SaaS-приложений (например, 37Signals) делать.

Например, если я предложу yourname.mysite.com, то как бы я использовать ASP.NET (MVC специально) для извлечения субдомен, так что я могу загрузить нужный шаблон (отображение названия вашей компании и т.п.)? Это может быть сделано с регулярной маршрутизацией?

Это, кажется, обычное дело в SaaS, так что должен быть простой способ сделать это в ASP.NET; Я знаю, что есть плагины, которые делают это для других структур, таких как Ruby On Rails.

Задан 09/12/2008 в 17:59
источник пользователем
На других языках...                            


4 ответов

голоса
3

Это работает для меня:

    //--------------------------------------------------------------------------------------------------------------------------
    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;
    }

Я предполагаю, что вы хотели бы обрабатывать несколько учетных записей в пределах одной и той же веб-приложения, а не строительство отдельных участков с помощью инструментов в IIS. В нашей работе, мы начали создание нового веб-сайта для каждого поддомена, но обнаружили, что этот подход не очень хорошо масштабируется - особенно, когда вы выпустить обновление и затем изменить десятки сайтов! Таким образом, я рекомендую этот подход, а не на сервер-ориентированные методы, предложенные выше на основе нескольких лет стоит опыт делает именно то, что вы предлагаете.

Код выше только убеждается, что это полностью сформированный URL (а, скажем, чем IP-адрес) и возвращает субдомен. Он работал хорошо для нас в условиях достаточно высокой громкости.

Ответил 15/12/2008 в 15:22
источник пользователем

голоса
2

Вы должны быть в состоянии поднять это из ServerVariables коллекции, но сначала необходимо настроить IIS и DNS для правильной работы. Таким образом , вы знаете 37Signals , вероятно , использовать Apache или другой с открытым исходным кодом, веб - сервер UNIX. На Apache это называется виртуальный хостинг .

Для того, чтобы сделать это с IIS вам необходимо будет создать новую запись DNS (создать CNAME yourname.mysite.com для application.mysite.com) для каждого домена, который указывает на приложения в IIS (application.mysite.com).

Затем создать запись в заголовок хоста в приложении IIS (application.mysite.com) , который будет принимать заголовок yourname.mysite.com. Пользователи будут на самом деле хит application.mysite, ком , но адрес обычай поддомен. Затем доступ к коллекции ServerVariables , чтобы получить значение принять решение о том , как настроить сайт.

Примечание: существует несколько альтернативных реализаций можно следовать в зависимости от требований.

  • Обрабатывать обработку заголовка узла в компенсатором нагрузки оборудования (более вероятно 37Signals сделать это, чем полагаться на веб-сервер), а также создать пользовательский заголовок HTTP, чтобы перейти к веб-приложению.
  • Создание нового веб-приложения и заголовок узла для каждого отдельного приложения. Это, вероятно, является неэффективной реализация для большого числа пользователей, но может предложить лучшую изоляцию и безопасность для некоторых людей.
Ответил 09/12/2008 в 18:22
источник пользователем

голоса
1

Вам нужно настроить DNS для поддержки подстановочных субдоменов. Это может быть сделано путем добавления записи A, указывающая на ваш IP-адрес, как это:

* A 1.2.3.4

После того, как его сделали, что вы печатаете, прежде чем ваш домен будет отправлен на ваш корневой домен, где вы можете получить, разделив переменную HTTP_HOST сервера, как пользователь сказал выше Buggs:

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

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

PS. Если вы используете виртуальный хостинг, вы, вероятно, придется с помощью аддона Уникальный IP от них, так как это является обязательным для подстановочные домены работать. Если вы с помощью выделенного хостинга у вас уже есть свой собственный IP-адрес.

Ответил 05/01/2009 в 23:36
источник пользователем

голоса
0

То, как я сделал это с HttpContext.Request.ServerVariables [ "HTTP_HOST"]. Split ( "").

Дай мне знать, если тебе еще понадобится помощь.

Ответил 15/12/2008 в 15:19
источник пользователем

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