0

当我尝试访问 HttpContext.Current.Request 对象时,我遇到了该异常。

我已经看到了l1l2l3的反应 ......所以......我的问题是:

IHttpModules 现在到底是为了什么?

我想开发一个模块,每次调用进入可能的网站时都会被命中,这样我就可以记录访问的 url、用户 IP 地址等...,但现在我似乎无法在 IIS7 中做到这一点了。有什么解决方法吗?(除了切换到“经典模式”)。

替代文字 http://userserve-ak.last.fm/serve/126/24432467.jpg

干杯。

4

2 回答 2

4

你什么时候这样做?它在模块事件中吗?它也应该在集成池中完全可行。最重要的是,在集成模式下运行时 ASP.NET 如何与 IIS 挂钩,这使得它“更加一流”。这确实意味着某些事件之前会触发,例如 Application_Start 现在将在实际请求的上下文之外触发。其他示例期望在 BeginRequest 中具有 Windows Authenticated Identity,因为现在 BeginRequest 甚至在 IIS 身份验证之前发生,而过去并非如此。

如果您的应用程序依赖于旧的不良行为,您仍然可以将 AppPool 更改为在经典模式下运行,它会正常工作。

您应该能够在任何特定于请求的通知中获取请求,例如 BeginRequest、EndRequest、PostAuthorizeRequest 等。此外,我建议不要使用 HttpContext.Current,因为这会导致在哈希表中进行额外查找,通常您可以以其他方式直接获取上下文,特别是在模块的上下文中,例如,如果您处理 BeginRequest,您应该能够:

    HttpApplication application = (HttpApplication)sender;  
    HttpContext context = application.Context;  

您将保存查找。

从您的描述看来,您应该实现一个处理 BeginRequest 和 EndRequest 的模块,您应该没问题。

于 2010-08-11T21:28:24.790 回答
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该类继承以激活它。

于 2010-08-11T15:55:52.670 回答