当我尝试访问HttpContext.Current.Request对象时,我收到了异常。
我在l1,l2和l3看到了回复......所以...我的问题是:
现在世界上有什么IHttpModules用于?
我想开发一个模块,每次呼叫进入可能的网站时都会被点击,所以我可以记录访问的网址,用户的IP地址等...,但现在看来我在IIS7中不能再这样做了。有没有解决方法? (除了切换到“经典模式”)。
alt text http://userserve-ak.last.fm/serve/126/24432467.jpg
干杯。
答案 0 :(得分:4)
如果您的应用程序依赖于旧的不良行为,您仍然可以将AppPool更改为在经典模式下运行,它可以正常工作。
您应该能够在任何请求特定的通知中获取请求,例如BeginRequest,EndRequest,PostAuthorizeRequest等。 另外,我建议不要使用HttpContext.Current,因为这会在哈希表中产生额外的查找,通常你可以通过其他方式直接获取上下文,特别是在模块的上下文中,例如,如果你处理BeginRequest,你应该能够做到:
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
您将保存查找。
根据你的描述,听起来你应该实现一个处理BeginRequest和EndRequest的模块,你应该没问题。
答案 1 :(得分:0)
我最初发布此评论是因为它不是一个真正的答案,但后来我看到你正在寻找一个“解决方案”,所以这是我对解决方案的想法。
<强> /App_Code/BasePage.vb 强>
Public Class BasePage : Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
''# Do all your logging here
End Sub
End Class
<强> /Default.aspx.vb 强>
Partial Class _Default : Inherits BasePage
''# This is simply your code behind for each page (notice it inherits BasePage)
''# You can still have your Page_Load events along with custom methods in here,
''# and it will not affect the logging portion of your app.
End Class
基本上你正在做的是创建一个单独的类,无论在哪个页面加载,它都会在每个页面加载上执行相同的工作。然后,应用程序中的每个页面都将继承BasePage
类,以便激活它。