0

適切に機能するために、すべての URL に XML ファイルを追加する必要がある Web サイトがあります。たとえば、ファイルの名前はmodule-1.xml.

これらの URL をきれいに保つために、 を使用してイベントHttpContext.Current.RewritePath内で追加ジョブを実行する IHttpModule を作成しました。OnBeginRequest

IHttpModule は非常にシンプルに見え、機能します。

public void OnBeginRequest(Object s, EventArgs e)
{
   string url = HttpContext.Current.Request.Url.AbsolutePath;
   if (url.EndsWith(".aspx"))
      HttpContext.Current.RewritePath(url + "?module-1.xml");
}

model-1.xmlここで、セッション変数を使用して、ユーザーが Web サイトを からに切り替えることを決定したことを検出しmodel-2.xml、コードを次のように変更したいと考えました。

public void OnBeginRequest(Object s, EventArgs e)
{
   string url = HttpContext.Current.Request.Url.AbsolutePath;
   if (url.EndsWith(".aspx"))
   {
      if (HttpContext.Current.Session["CurrentMode"] == "1")
         HttpContext.Current.RewritePath(url + "?module-1.xml");
      else if(HttpContext.Current.Session["CurrentMode"] == "2")
         HttpContext.Current.RewritePath(url + "?module-2.xml");
    }
}

私が見つけたものから、セッションはモジュール内でアクセスできますが、機能させることOnBeginRequestができる唯一のイベントであるイベント内からはアクセスできませんHttpContext.Current.RewritePath(少なくとも私が行ってきたすべてのテストから)。

私の仮定は正しいですか?もしそうなら、どのような代替手段を使用できますか? カスタム セッション変数を作成しますか? ユーザーが見ているモジュールを知るために、txt ファイルまたは DB から読み取る必要がありますか? モジュール内からユーザーを追跡するにはどうすればよいですか?

4

2 に答える 2

1

これは、アプリケーションに必要なセキュリティによって異なります。悪意のあるユーザーが値を変更できることを気にしない場合は、モジュール名をCookieに保存するだけです。その場合、安全に生成された識別子をCookieに保存し、それをデータベースで検索して、使用する必要のある値を取得できます。

于 2012-10-03T23:52:27.103 に答える
1

モジュールを完全に削除します。aspx ページに添付するだけなので、URL に含める必要はありません。代わりに、プロジェクト ページが継承するベース ページを作成します。

public class Solution.Web.UI.Page : System.Web.UI.Page
{
    public string CurrentMode 
    { 
        get { return String.Compare(Session["CurrentMod"].ToString(), "1") == 0) ? "module-1.xml" : "module-2.xml"; }
    }
}

そうすれば、そのモジュールのオーバーヘッドや、その情報を Cookie に入れるリスクなしに、ページで簡単にアクセスできます。

于 2012-10-04T03:18:22.697 に答える