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: header_value

设置 Cookie:cookie_BeginRequest=cookie_value;路径=/

header_PreSendRequestContent: header_value

设置 Cookie:cookie_PreSendRequestContent=cookie_value;路径=/

相反,我看到了(注意重复的 Set-Cookie cookie_BeginRequest):

header_BeginRequest: header_value

设置 Cookie:cookie_BeginRequest=cookie_value;路径=/

设置 Cookie:cookie_BeginRequest=cookie_value;路径=/

header_PreSendRequestContent: header_value

设置 Cookie:cookie_PreSendRequestContent=cookie_value;路径=/

上面的标题是从 Fiddler 中提取的,以排除浏览器是问题的根源。我已经单步执行了代码,似乎 BeginRequest 事件在每个请求中只触发一次。这得到了 header_BeginRequest 标头仅出现一次的事实的支持。我还检查了该模块只注册了一次。测试均在 IIS Express 和 .Net 4.5 下运行。

这是预期的行为吗?

4

0 回答 0