2012-02-24 31 views
0

私はASP.NETで書かれたウェブサイトを持っています。 私は州のサブドメインを追加したいと思います。 nevada.mysite.comなど。 しかし、私はそのサイト全体をそのサブドメインのためにカスタム作成したいと思います。 つまり、それぞれのサブドメインのコンテキストをキャプチャして、さまざまなことを示したいと思います。サブドメイン別ウェブサイトの変更

私は別のウェブサイトに分けたくありません。 IISの同じWebサイトにすべてのユーザーを置いてほしい

このような問題を処理するための最良の方法は何ですか? ここで、状態のグローバル変数を保持して保存することをお勧めしますか?

ありがとうございます!

答えて

1

まず、すべてのサブドメインがDNSの単一のIPアドレスを指しているようにします。次に、そのIP上のすべての接続をリッスンするようにIISを構成

が続いHttpModule(あるいはGlobal.asaxのを使用)BeginRequestイベントのハンドラを記述(ホスト名を指定しないでください)。着信URLからサブドメイン名を抽出し、HttpContext.Items["state"]に格納します(ItemsDictionaryはリクエストごとに一意です)。

1

これは大きな質問です。私はサブドメインを使わなかったことを除いてこれをやったことがあります。別のURLを使っていましたが、同じコードとデータベースを使いました。私は、これをLINQとSQLコードとの間に少しずつしっかりと統合する方法が必要でしたが、それぞれにwhere句を入力する必要はありません。ここでは、私がやったことだ:SQLにLINQを持つテーブルを照会するとき

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

は基本的に私は自分のカスタム句を持っています。

ので、同じように使用

私は1つのウェブサイト、またはその両方に対して指定するために必要なデータを持っていた各テーブルの最後に
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; } 
    } 

それは興味深いシステムのようなものだ、おそらく多くの異なった方法でそれを行っている可能性があります。しばらく前にそれを構築し、それは素晴らしい作品です。

関連する問題