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

时间:2014-09-17 17:42:01

标签: c# asp.net-mvc

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

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

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

总而言之,(A)当Application_PostAuthenticateRequest()不是global.asax类的已定义方法时,如何被调用,以及(B)为什么它们不会被调用这是一种虚拟方法吗?

1 个答案:

答案 0 :(得分:4)

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