2009-07-10 29 views
2

我有一个Web应用程序(.NET 3.5):检查是否具有此代码在Global.asax中IsCallback上的Application_BeginRequest

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回调?

非常感谢您的任何反馈意见。

回答

0

从我的理解,所有IsCallback所做的是检查表单是否具有名为__CALLBACKARGUMENT的后置变量。你可以在Context.Request.Form中自己检查表单,它应该告诉你与IsCallback相同的内容。

1

John,

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

非常感谢您的帮助!

1

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

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 
相关问题