Изменение сайта в соответствии с поддоменом - PullRequest
0 голосов
/ 24 февраля 2012

У меня есть сайт, написанный на ASP.NET.Я хотел бы добавить субдомены государств.такие как nevada.mysite.com.Тем не менее, я бы хотел, чтобы весь мой сайт был сделан на заказ для этого субдомена.То есть я хотел бы на каждой странице зафиксировать, какой у меня субдомен, и показать разные вещи.

Я не хочу разделять разные веб-сайты.Я хочу, чтобы все они размещались на одном и том же веб-сайте в IIS

. Каков наилучший и правильный способ решения такой проблемы?где вы предлагаете хранить и сохранять глобальную переменную состояния?

Спасибо!

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Это отличный вопрос.Я делал это раньше, за исключением того, что я не использовал поддоменов, я использовал разные URL, но они все еще использовали тот же код и базу данных.Мне нужен был способ более тесно интегрировать это с моим кодом LINQ to SQL без необходимости вводить предложения where для каждого из них.Вот что я сделал:

public static IEnumerable<T> GetDataByDomain<T>(
        IQueryable<T> src) where T:IDbColumn
    {
        //1 == website1
        //2 == website2
        //3 == both

        string url = HttpContext.Current.Request.Url.Host;
        int i = url == "localhost"
             || url == "website1.com"
             || url == "www.website1.com" ? 1 : 2;

        return src.Where(x => x.domainID == i|| x.domainID == 3);
    }

В основном при запросе таблицы с LINQ to SQL у меня есть свое собственное предложение where.

Используется примерно так:

using (var db = new MyDataContext())
        {
            var items = Utility.GetDataByDomain(db.GetTable<Item>()).Where(x => x.isVisible);
        }

Наконец, в каждой таблице, где у меня были данные, которые нужно было указать для одного веб-сайта или для обоих, я добавил столбец, который принял значение 1,2 или 3 (оба).Кроме того, в моем контексте данных LINQ я создал частичный класс и сослался на мой интерфейс:

public partial class Item : Utility.IDbColumn
{

}

Причина, по которой нам нужен следующий интерфейс, заключается в том, что первый метод принимает неизвестный тип, поэтому, очевидно, я не могу выбрать свойствоот неизвестного типа, если только я не скажу ему, что любой тип, который я передаю ему, зависит от интерфейса, который содержит это свойство.

Интерфейс:

public interface IDbColumn
    {
        int domainID { get; set; }
    }

Это довольно интересная система, вероятно, можетсделали это разными способами.Построил его некоторое время назад, и он прекрасно работает.

1 голос
/ 24 февраля 2012

Во-первых, все ваши субдомены указывают на один IP-адрес в DNS.

Затем настройте IIS для прослушивания всех подключений по этому IP-адресу (не указывайте имя хоста)

Затем напишите HttpModule (или, возможно, используйте Global.asax) с обработчиком для события BeginRequest. Извлеките имя субдомена из входящего URL-адреса и сохраните его в HttpContext.Items["state"] (Items Dictionary уникален для каждого запроса).

...