2012-03-23 17 views
2

目的は、ユーザーコードがResponse.Redirectを呼び出すときに代行受信し、ブラウザがリダイレクトされるURLを変更することです。このURLを変更するには、Sessionにアクセスする必要があります(Sessionに格納する情報は、このURLに何を入れるべきかを示す情報です)。ほとんどの場合、状況の下でリダイレクト先にクエリ引数を追加するだけです。ASP.Net PreSendRequestHeadersがセッションにアクセスできない

PreSendRequestHeadersResponse.RedirectLocationを変更させます。それはいいです。ただし、ここからセッション状態にアクセスすることはできません。このイベントが発生する前に明らかに解放されています。

ですから、この情報を入手する方法が必要ですPreSendRequestHeaders;それを達成するには別の方法が必要です。最終的に私の目標は、ブラウザがリダイレクトされている場所のクエリ文字列に引数を追加することだけです。

+0

あなたは簡単に従っていないのはなぜ - あなたが好きなパラメータを使用して開始されてからのリダイレクトを行うことを? – Aristos

+0

私はリダイレクトを開始するコードを常に制御しているわけではないので、 – wasabi

答えて

2

セッションに書き込むコードを変更できる場合は、Context.Itemsを使用できます。

は、例えば、Response.RedirectPermanent方法は存在していた前に、私は次のように使用:

//in some library 
public static void PermanentRedirect(this HttpContext context, string url) 
{ 
    context.Items["IsPermanentRedirect"] = true; 
    context.Response.Redirect(url); 
} 

//in global.asax 
void Application_PreSendRequestHeaders(object sender, EventArgs e) 
{ 
    if (Response.IsRequestBeingRedirected && (bool) (Context.Items["IsPermanentRedirect"] ?? false)) 
    { 
     Response.Status = "301 Moved Permanently"; 
    } 
} 
関連する問題