PostAuthenticateRequest()在Global.asax中调用?

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

然而,它真的让我感到很奇怪,这看起来像是什么“魔力”。 Application_PostAuthenticateRequest()不是一个虚拟方法。 我不会在课堂上重载或实施任何现有的方法签名。 那么,MVC框架如何知道它呢? 毕竟,C#是一种强类型语言,除非您知道它在那里,否则您无法在类上调用方法。

我能看到的唯一方法就是通过反射。 也许会通过最终对象的方法并将任何匹配特定签名的方法分配给委托。 但我真的不知道。 我不明白为什么设计师会这样做,而不是仅仅实现一种虚拟方法。

总而言之,(A)当Application_PostAuthenticateRequest不是global.asax类的已定义方法时,如何调用Application_PostAuthenticateRequest ,以及(B)为什么他们没有使它成为虚拟方法?


里克斯特拉尔有一篇综合性文章。 简而言之,运行时在您的全局应用程序类中使用反射。

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

链接地址: http://www.djcxy.com/p/81477.html

上一篇: PostAuthenticateRequest() get called in Global.asax?

下一篇: How does std::array initializer work for char's?