0

背景情報: Mike Volodarsky によるこのブログ エントリに基づいて、.NET Framework を使用して IIS7 用のカスタム ハンドラーとカスタム モジュールを作成しました。

これまでのところ、ハンドラーとモジュールですべてが正常に機能していますが、ここに私の問題/シナリオがあります。

特定の URL に対する要求がハンドラーによって認識された場合、Cookie を読み取り、その情報を取得して、それらのデータを着信要求のヘッダーに追加する必要があります。

「IHttpHandler」メンバーのこれまでのコーディングは次のとおりです。

public void ProcessRequest(HttpContext context)
{
    var response = context.Response; 
    //var request = context.Request;
    var cookieInformation = GetSomeInformationFromCookie();
    if (!string.IsNullOrEmpty(cookieInformation))
    {
        var nameValueCollection = new NameValueCollection
                                         {{"CustomAspNetHeader", cookieInformation}};
        response.Headers.Add(nameValueCollection);
    }
    // I would like to proceed the current request 
    // just with the updated header-information.
}

着信要求のヘッダー情報を更新する方法はありますか?

「<strong>MyPage.aspx」というページがあるとしましょう。PageLoad-Eventでは、次のように記述します。

foreach (var header in HttpContext.Current.Request.Headers)
{
    var value = HttpContext.Current.Request.Headers[header.ToString()];
    var s = string.Format("Header: <strong>{0}</strong>, Value: <strong>{1}</strong><br />", header, value);
    Response.Write(s);
}

基本的に、foreach ループから次の情報を取得します。

  • ヘッダー: 接続、値: キープアライブ
  • ヘッダー: 受け入れ、値: text/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8
  • ヘッダー: Accept-Encoding、値: gzip、deflate、sdch
  • ヘッダー: Accept-Language、値: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
  • ヘッダー: Cookie、値: ASP.NET_SessionId=242xbd55fxhxv055hfunnj55
  • ヘッダー: ホスト、値: localhost:61045
  • ヘッダー: User-Agent、値: Mozilla/4.0 (互換性あり; MSIE 8.0; Windows NT 6.1)

次に、ハンドラーが IIS7-Manager で拡張子が.aspxのファイルをリッスンできるようにします。'<strong>MyPage.aspx' を 2 回目に実行すると、PageLoad-Eventが発生し、すべてのヘッダー情報が表示されます... ここに私の問題があります。ハンドラーが「MyPage.aspx」の着信要求を処理しており、PageLoad-Event に到達/起動しないため、何も表示されません。

着信要求のヘッダー情報を更新する別の手法があるかもしれません (.NET で)。

どんな助けでも大歓迎です。

4

1 に答える 1

0

作成した Http ハンドラーからコードを取得し、global.asax で実行します。

このようなもの:

protected void Application_BeginRequest()
{
    // Manipulate the headers as you see fit.
}
于 2013-09-24T13:48:10.707 に答える