这与question I opened a while ago半关联。 ASP.NET Forms Authentication模块的行为方式是它注册了app.AuthenticateRequest
和app.EndRequest
的订阅形式auth劫持的方式EndRequest是非常糟糕的方式,并且是一个糟糕的设计决策使得Forms Auth极其复杂。目前我有一个讨厌的实现,阻止重定向来做我想要的事情。我从来没有对此感到满意,今天发现随机的想法,回顾这段代码是否有一种我可以解开的方式
app.EndRequest += new EventHandler(this.OnLeave);
我看到How to remove all event handlers from a control上有可能相关的答案,但这些答案的实现似乎变化很大,看起来它们可能只与Control
个继承者相关。
这个最重要的部分是删除1个特定的事件订阅,而不是删除毯子。我想任何可以获得订阅的解决方案,将它们全部核对,然后允许我重新订阅其他所有订阅同样有效。
答案 0 :(得分:0)
这样的事情可以解决问题:
var formsModule = application.Modules.OfType<FormsAuthenticationModule>().FirstOrDefault();
if (formsModule != null)
{
const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
var method = typeof(FormsAuthenticationModule).GetMethod("OnLeave", flags);
var handler = (EventHandler)Delegate.CreateDelegate(typeof(EventHandler), formsModule, method);
application.EndRequest -= handler;
}