挂钩到HttpApplication.带有运行时生成处理程序的BeginRequest导致NullReference异常

本文关键字:程序 处理 BeginRequest 导致 异常 NullReference HttpApplication 运行时 | 更新日期: 2023-09-27 17:50:43

在连接到事件后。BeginRequest(和其他一些HttpApplication事件)与运行时生成的委托,如

var expr = Expression.Lambda<EventHandler>(Expression.Empty(),
    new[]
    {
        Expression.Parameter(typeof (object)),
        Expression.Parameter(typeof (EventArgs))
    });
var handler = expr.Compile();
application.BeginRequest += handler;

我得到一个错误:

NullReferenceException: Object reference not set to an instance of an object.]
 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +120
  System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +114

环境:ASP。4 .

净如果在另一个委托调用中调用该委托,则

异常传递:application.BeginRequest += (s, e) =>{handler(s, e);};

这个方法不能使我满意。

该行为似乎是特定于HttpApplication的,因为其他类以预期的方式行为。有没有人能解释一下这个问题?

挂钩到HttpApplication.带有运行时生成处理程序的BeginRequest导致NullReference异常

发现,这是因为访问了MemberInfo.ReflectedType.ToString()。在动态方法中MemberInfo。ReflectedType为Null。如果方法是在TypeBuilder生成的类型中创建的,