我已经查看了所有其他“请求在此上下文中不可用”的帖子,并且这种情况看起来很独特。
我们应用程序中的许多页面都继承自“基页”类(我们称之为BP2),该类继承自继承自System.Web的另一个“基页”类(我们称之为BP1)。 UI.Page。我们在底层基页(BP2)中存储了许多共享函数和Web方法。我试图从jQuery访问其中一个Web方法,并收到错误:请求在此上下文中不可用。从代码隐藏中访问该方法工作正常。
此Web方法是BP2中的公共共享函数,错误似乎来自该函数尝试从BP1访问的属性。该属性是存储在HttpContext.Current.Cache中的数据库结果列表,该列表在第一次请求时填充。但是,查看HttpContext.Current.CurrentHandler对象会显示属性值为{“请求在此上下文中不可用。”}并且永远不会填充它。以下是代码的“简化”版本:
BP2:
<WebMethod()>
Public Shared Function SaveThing() As Integer
Return HttpContext.Current.CurrentHandler.GetListOfValueId("something")
End Function
BP1:
Public ReadOnly Property ListOfValues As List(Of lovDbResult)
Get
Return Utility.ListOfValues
End Get
End Property
Public Function GetListOfValueId(ByVal value As String) As Integer
If value <> "" Then
'Problem is in the next line.
For Each lov In HttpContext.Current.CurrentHandler.ListOfValues.Where(....)
Return lov.id
Next
End If
Return New Nullable(Of Integer)
End Function
实用程序:
Public Shared ReadOnly Property ListOfValues() As List(Of lovDbResult)
Get
If HttpContext.Current.Cache("ListOfValues") Is Nothing Then
'Retrieve from database and add to cache.
End If
Return HttpContext.Current.Cache("ListOfValues")
End Get
End Property
编辑:重要的是要注意lovDbResult是一个LINQ to SQL结果对象。
答案 0 :(得分:0)
显然,我错误地发现了这个错误发生的地方。该属性未被填充,因为在上面的伪代码部分中显示“'从数据库中检索并添加到缓存中”,调用了HttpContext.Current.CurrentHandler.Request,其中<em>是在WebMethod调用的上下文中不可用。通过将其更改为HttpContext.Current.Request来更正此问题。