我正在使用 HttpModule 拦截对我的网站的每个请求,以便为它们分配身份验证 cookie,这只是初步版本,但我的 HttpModule 中有一个静态列表,对于我添加的每个新请求列表中的一个元素。出于测试目的,我将它们全部写入响应中,以查看我的方法是否有效,但无论列表中有多少用户,它都只会给我两个值。
这是我的代码示例,我通过用字符串列表替换用户列表来保持简单。
public class SCCModule : IHttpModule
{
private static List<string> _users = new List<string>();
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += OnPreRequestHandlerExecute;
}
public void Dispose()
{
}
public void OnPreRequestHandlerExecute(Object source, EventArgs e)
{
HttpApplication app = (HttpApplication)source;
HttpResponse response = app.Context.Response;
HttpRequest request = app.Context.Request;
_users.Add("A user from " + DateTime.Now + "</br>");
foreach(var u in _users)
{
response.Write(u);
}
}
}
从网站加载示例index.html时,它给了我:
来自 10/18/2012 3:37:33 PM 的用户
2012年10月18日下午3:37:35的用户
有关我的设置的信息:我正在运行 IIS7.5,我已向其中添加了一个模块,按执行优先级顺序,它是第一个。我已经在 web.config 中启用了调试。我的 VisualStudio 设置为构建调试配置,并且有一个构建后事件可以将我的 DLL 直接复制到我网站的 bin 文件夹。我将自己附加到 w3wp.exe 进程以对其进行调试。
一个有趣的事实:调试时。我在 index.html 页面上点击刷新的前两次将触发我的断点,之后就不会了。我输入的任何新 URI 只会命中断点两次。
为什么我可以刷新十次,但似乎只有两个结果?
Fiddler 结果:
最佳答案
您的浏览器已经缓存了html、图片、css等资源。
一旦浏览器缓存了它们,就不会再次询问它们,除非您在 IE 中单击 Ctrl+F5。
您可以使用Request.Path查看请求。
HttpRequest request = app.Context.Request;
_users.Add("A user from " + DateTime.Now + " - " +
app.Context.Request.Path + "</br>");
关于c# - 在 ASP.Net HttpModule 中使用静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12962462/