MVC 5:如何在Global.asax中调用Application_PostAuthenticateRequest()

本文关键字:Application 调用 PostAuthenticateRequest asax Global MVC | 更新日期: 2023-09-27 18:22:25

当为[Authorize]属性设置自定义主体以在Microsoft的MVC版本4和5中工作时,我们需要进入Global.asax.cs并设置一个名为Application_PostAuthenticateRequest()的方法。我已经在我目前的项目中做到了这一点,而且效果很好。

然而,这看起来有多像"魔法",真的让我很困扰。Application_PostAuthenticateRequest()不是虚拟方法。我没有重载或实现类中任何现有的方法签名。那么MVC框架怎么知道该怎么称呼它呢?毕竟,C#是一种强类型语言,除非你知道它在类上,否则你无法调用它。

我能看到的唯一方法是通过反射。也许会遍历最终对象的方法,并将任何与某个签名匹配的方法分配给代理。但我真的不知道。我不明白为什么设计师会这么做,而不仅仅是实现一个虚拟方法。

总之,(A)当Application_PostAuthenticateRequest不是global.asax类的定义方法时,它是如何被调用的?(B)为什么他们不把它变成一个虚拟方法?

MVC 5:如何在Global.asax中调用Application_PostAuthenticateRequest()

Rick Strahl有一篇关于这方面的综合文章。简而言之,运行时使用对全局应用程序类的反射。

http://weblog.west-wind.com/posts/2009/Jun/18/How-do-ASPNET-Application-Events-Work

这种类型的事件关联通常被称为"自动",也存在于页面级别。例如,Page_Load只是因为默认的自动连线而被调用的。

http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.autoeventwireup(v=vs.110).aspx