【问题标题】:Check if IsCallback on Application_BeginRequest检查 Application_BeginRequest 上的 IsCallback
【发布时间】:2009-07-10 17:06:58
【问题描述】:

我有一个 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 回调?

非常感谢您的任何反馈。

【问题讨论】:

    标签: asp.net ajax global-asax


    【解决方案1】:

    约翰,

    感谢您为我指明正确的方向。解决方案实际上是检查 Request.Form("__ASYNCPOST")。如果是回调,则设置为“true”。

    非常感谢您的帮助!

    【讨论】:

      【解决方案2】:

      您应该有权访问 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
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-04
          • 1970-01-01
          • 2017-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-12
          • 1970-01-01
          相关资源
          最近更新 更多