【发布时间】:2019-04-10 12:42:51
【问题描述】:
我在 Global.asax.vb 中定义了以下内容...
Private Sub Global_asax_BeginRequest(sender As Object, e As EventArgs) Handles Me.BeginRequest
Try
If Request IsNot Nothing Then 'this line throws an exception...
With Request
...
错误是...
错误 - Global_asax:System.NullReferenceException: 对象引用 未设置为对象的实例。
我对这条特定的行如何出错感到有点困惑。我要做的就是测试对象是否为空/无。
我猜当请求开始时,幕后肯定有其他事情发生,但我不知道如何进一步调试它。
此错误并非每次都会发生。我只是偶尔在日志中看到这些错误,我不知道它们是如何发生的。我无法重现它。由于无法访问 Request 对象,我无法获得有关导致它的请求类型的任何其他信息。
更新...
我尝试更改访问 Request 属性的方式,看看是否会有所不同...
Public Sub Application_BeginRequest(sender As Object, e As EventArgs)
Dim app As HttpApplication = TryCast(sender, HttpApplication)
If app IsNot Nothing Then
Dim _request = app.Request
...
这一次,有趣的是,异常发生在这一行……
Dim app As HttpApplication = TryCast(sender, HttpApplication)
这看起来很奇怪,因为 TryCast 专门用于不抛出异常。
这是我得到的完整堆栈跟踪...
System.NullReferenceException: Object reference not set to an instance of an object.
at Global_asax.Application_BeginRequest(Object sender, EventArgs e) in C:\vs_agent\_work\4\s\...\Global.asax.vb:line 97
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
第 97 行对应 TryCast 行。
我目前的理论是它可能与 Owin 中间件有关
【问题讨论】:
-
你能添加堆栈跟踪和错误详细信息吗?您使用的
Request可能与可用的Request属性不同。另外方法名通常使用Application_BeginRequest,我从未见过像Global_asax_BeginRequest这样的。 -
据我所知,无论是使用 Handles Me.BeginRequest 还是 Application_BeginRequest 定义,它都做同样的事情。我似乎找不到任何关于哪种方式更可取的信息。在 Visual Studio 中,如果我让它为我创建函数存根,通过单击“Global_asax Events”->“BeginRequest”,这就是它的定义方式。
-
由于某种原因,我目前在日志中没有堆栈跟踪。我要做的是添加额外的日志记录,如果我能获得更多信息,请在此处更新。
-
@TetsuyaYamamoto 我刚刚确认没有可用的堆栈跟踪。我所包含的是我能得到的所有细节。我尝试更改为 Application_BeginRequest,但错误仍然完全相同。此外,“请求”只是标准的应用程序属性。范围内其他任何地方都没有其他“请求”。
-
如果您使用
Application_BeginRequest或仅使用Global_asax_BeginRequest,您是否遇到过错误?您是否为后者正确注册了活动?
标签: asp.net vb.net asp.net-mvc-5