IIS6 または 5 と比較して、IIS7 で HttpModules を記述する方法にいくつかの変更があったため、IIS7 を使用している場合、私の提案は有効ではない可能性があります。
HttpContext の Current 静的プロパティを使用すると、現在のコンテキストへの参照を取得できます。HttpContext クラスには、リクエスト (HttpRequest タイプ) とレスポンス (HttpResponse) の両方のプロパティがあり、処理するイベント (Application.EndRequest かな?) に応じて、これらのオブジェクトに対してさまざまなアクションを実行できます。
配信されるページのコンテンツを変更したい場合は、おそらくこれをできるだけ遅くしたいので、EndRequest イベントに応答するのがおそらくこれを行うのに最適な場所です。
要求されたファイルの種類を確認するには、System.IO.Path クラスと共に Request.Url プロパティを確認します。次のようなことを試してください:
string requestPath = HttpContext.Current.Request.Url.AbsolutePath;
string extension = System.IO.Path.GetExtension(requestPath);
bool isAspx = extension.Equals(".aspx");
コンテンツの変更はより困難です。Context オブジェクトのイベントの 1 つでできるかもしれませんが、よくわかりません。
考えられるアプローチの 1 つは、Context.Items コレクションの値をチェックする独自のカスタム Page 派生クラスを作成することです。この値が見つかった場合は、Label を PlaceHolder オブジェクトに追加して、ラベルのテキストを任意のものに設定できます。
このようなものが動作するはずです:
次のコードを HttpModule 派生クラスに追加します。
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(BeginRequest);
}
void BeginRequest(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
HttpRequest request = context.Request;
string requestPath = HttpContext.Current.Request.Url.AbsolutePath;
string extension = System.IO.Path.GetExtension(requestPath);
bool isAspx = extension.Equals(".aspx");
if (isAspx)
{
// Add whatever you need of custom logic for adding the content here
context.Items["custom"] = "anything here";
}
}
次に、次のクラスを App_Code フォルダーに追加します。
public class CustomPage : System.Web.UI.Page
{
public CustomPage()
{ }
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
if (Context.Items["custom"] == null)
{
return;
}
PlaceHolder placeHolder = this.FindControl("pp") as PlaceHolder;
if (placeHolder == null)
{
return;
}
Label addedContent = new Label();
addedContent.Text = Context.Items["custom"].ToString();
placeHolder .Controls.Add(addedContent);
}
}
次に、次のようにページを変更します。
public partial class _Default : CustomPage
継承が System.Web.UI.Page から CustomPage に変更されていることに注意してください。
最後に、カスタム コンテンツが必要な場所に PlaceHolder オブジェクトを aspx ファイルに追加します。