c# - MVC 5 : How Does Application_PostAuthenticateRequest() get called in Global. asax?

标签 c# asp.net-mvc

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

但是,这真的让我很烦恼,这看起来多么“神奇”。 Application_PostAuthenticateRequest() 不是虚方法。我没有在类中重载或实现任何现有的方法签名。那么MVC框架是怎么知道调用它的呢?毕竟,C# 是一种强类型语言,除非您知道它存在,否则您无法调用类上的方法。

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

因此,总而言之,(A) 当 Application_PostAuthenticateRequest 不是 global.asax 类的已定义方法时,它是如何被调用的,以及 (B) 他们为什么不将其设为虚拟方法?

最佳答案

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

关于c# - MVC 5 : How Does Application_PostAuthenticateRequest() get called in Global. asax?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25897032/

相关文章:

javascript - MVC 操作中引导日期到 C# 日期时间

c# - Entity Framework Code First,不同上下文/数据库之间的导航属性

asp.net - iis 8.5 中用于 mvc 和 webapi 应用程序的路由

asp.net-mvc - 如何在一个解决方案中的多个项目之间共享脚本?

c# - 转到 xamarin.forms 中的另一个页面后,汉堡图标消失

javascript - JQuery 事件处理以及通过 POST 检索的数据?

mysql - MYSQL 和 MVC3 SQL 连接错误\ProviderManifestToken 但我正在使用 MySQL

c# - 在 Winforms 中使用 Graph# 的示例

c# - 无法访问 HTML 中定义的图像控件,在 C# 文件后面的代码中

c# - Sitecore 管道干扰 WebMethod (asmx) 调用