2

次の IHttpModule が登録されると、cookie_BeginRequest の重複した Cookie ヘッダーが取得されます。

public class MyModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.BeginRequest+=(sender, e) =>
            {
                SetValues("BeginRequest");
            };
        context.PreSendRequestContent+=(sender, e) =>
            {
                SetValues("PreSendRequestContent");
            };
    }

    static void SetValues(string name)
    {
        var httpContext = HttpContext.Current;

        var httpCookie = new HttpCookie("cookie_" + name, "cookie_value");
        httpContext.Response.Cookies.Add(httpCookie);
        httpContext.Response.Headers.Add("header_" + name, "header_value");
    }

    public void Dispose()
    {
    }
}

次のヘッダーが表示されることを期待しています。

header_BeginRequest: ヘッダー値

セット Cookie: cookie_BeginRequest=cookie_value; パス=/

header_PreSendRequestContent: header_value

セット Cookie: cookie_PreSendRequestContent=cookie_value; パス=/

代わりに、次のように表示されます (重複した Set-Cookie cookie_BeginRequest に注意してください):

header_BeginRequest: ヘッダー値

セット Cookie: cookie_BeginRequest=cookie_value; パス=/

セット Cookie: cookie_BeginRequest=cookie_value; パス=/

header_PreSendRequestContent: header_value

セット Cookie: cookie_PreSendRequestContent=cookie_value; パス=/

上記のヘッダーは Fiddler から抽出されたもので、ブラウザーが問題の原因であることを除外しています。コードを確認したところ、BeginRequest イベントはリクエストごとに 1 回だけ発生しているようです。これは、header_BeginRequest ヘッダーが 1 回しか表示されないという事実によって裏付けられています。また、モジュールが一度だけ登録されていることも確認しました。テストはすべて IIS Express および .Net 4.5 で実行されました。

これは予想される動作ですか?

4

0 に答える 0