5

我正在阅读 .NET4 源代码(可以免费下载它们进行研究),我在 .NET4 的实现中发现了一些奇怪的东西System.Web.Security.FormsAuthenticationModule

该类声明如下:

public sealed class FormsAuthenticationModule : IHttpModule

whereIHttpModule有两种方法 -Init()Dispose().

里面OnEnter()有这些行:

// Step 2: Call OnAuthenticate virtual method to create 
//    an IPrincipal for this request
OnAuthenticate( new FormsAuthenticationEventArgs(context) );

whereOnAuthenticate()声明如下:

// OnAuthenticate: Forms Authentication modules can override 
//             this method to create a Forms IPrincipal object from
//             a WindowsIdentity 
private void OnAuthenticate(FormsAuthenticationEventArgs e) {

现在类是sealed,所以不可能继承。也不OnAuthenticate()virtual,所以我看不出它是如何被覆盖的。

所以看起来这些评论已经过时并且OnAuthenticate()不再可能覆盖。

我有什么不对吗?这段代码可能允许覆盖OnAuthenticate()吗?

4

2 回答 2

1

它不起作用。这只是不正确的文档。对于 MS 来说,这不是第一次。例如,我在 .NET Framework 的 1.1 版中通知了 MS​​,而我们现在是 4.5,文档仍然完全具有误导性:http: //msdn.microsoft.com/en-us/library/7he0a7s1.aspx

请注意“继承者须知”部分。internal abstract当一个类包含多个属性和方法时,应该如何从 BindingManagerBase 派生一个类?然而,BindingManagerBase 和 CurrencyManager 的文档中有几个地方有“继承者注释”......

于 2013-03-25T21:33:43.977 回答
0

我知道这很旧,但唯一的方法是在 Global.asax 中实现 FormsAuthenticate_OnAuthenticate 事件。当您将 e.Context.User 设置为一个值时,它会阻止内部代码执行。这有点笨拙。

于 2021-03-19T11:19:55.450 回答