检查Application_BeginRequest上是否有IsCallback

时间:2009-07-10 17:06:58

标签: asp.net ajax global-asax

我有一个Web应用程序(.NET 3.5),在Global.asax中包含此代码:

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
    LinkLoader()
    PathRewriter()
    PathAppender()
End Sub

我希望调用里面的所有函数,除非它是一个AJAX回调。所以,理想情况下我会改为:

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
    If not Page.IsCallback then
        LinkLoader()
        PathRewriter()
        PathAppender()
    End If
End Sub

但是这里无法访问页面对象。所以,基本上我的问题是:

如何检查请求是否是Application_BeginRequest中的AJAX回调?

非常感谢您的任何反馈。

3 个答案:

答案 0 :(得分:1)

约翰,

感谢您指点我正确的方向。解决方案实际上是检查Request.Form(“__ ASYNCPOST”)。如果是CallBack,则设置为“true”。

非常感谢你的帮助!

答案 1 :(得分:1)

您应该有权访问HttpContext.Current.Handler对象,您可以将该对象强制转换为Page对象并获取Page.IsPostBack或Page.IsCallBack。虽然为了安全地执行此操作,您需要首先测试它是Page对象而不是null:

With HttpContext.Current
   If TypeOf .Handler Is Page Then
      Dim page As Page = CType(.Handler, Page)
      If page IsNot Nothing AndAlso (page.IsCallBack OrElse page.IsPostBack) Then
         'Do something
      End If
   End If
End With

答案 2 :(得分:0)

根据我的理解,IsCallback所做的就是检查表单是否有一个名为__CALLBACKARGUMENT的post变量。您可以在Context.Request.Form中自己检查表单,这应该告诉您与IsCallback相同的事情。