.net 4.5 Web.Security.Membership.Providers删除抛出的system.notsupportedexception。为什么?

时间:2013-05-19 15:43:44

标签: .net membership-provider

为了更好地理解如何在.net MVC4应用程序中连接auth功能,我想我会拆开“Internet应用程序”模板生成的网站。最后,我正在研究如何实现声称感知的内容(例如:https://github.com/brockallen/BrockAllen.MembershipReboot

作为其中的一部分,我发现自己正在查看WebMatrix.WebData.WebSecurity.PreAppStartInit()方法,其中包含以下代码:

 const string BuiltInMembershipProviderName = "AspNetSqlMembershipProvider";
    var builtInMembership = Membership.Providers[BuiltInMembershipProviderName];
    if (builtInMembership != null)
    {
        var simpleMembership = CreateDefaultSimpleMembershipProvider(BuiltInMembershipProviderName, currentDefault: builtInMembership);
        Membership.Providers.Remove(BuiltInMembershipProviderName);
        Membership.Providers.Add(simpleMembership);
    }

如果我尝试在控制台应用程序中运行类似的东西,则会调用Membership.Providers.Remove(BuiltInMembershipProviderName);点处的System.NotSupportedException。如果集合调用了SetReadOnly方法,但是没有调用,则可以预料到这一点。我不确定为什么会出现在控制台应用程序代码中,而不是Web应用程序。有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这让我困惑了一段时间。诀窍是初始化的时机。它需要在很早的阶段进行。当您在WebMatrix.WebData命名空间中进行挖掘时,还需要查看其他几个部分,以了解它是如何工作的。

应用了PreApplicationStartMethod装配属性:

[assembly: PreApplicationStartMethod(typeof(PreApplicationStartCode), "Start")]

此属性中指定的方法将作为应用程序启动序列的一部分进行调用。 PreApplicationStartCode.Start()方法将调用WebSecurity.PreAppStartInit()以及执行一些其他配置任务。

您可以通过执行相同的操作来自行复制此功能。将PreApplicationStartMethod属性添加到程序集中,并让它调用您自己的“启动”方法。在此阶段,您将能够使用会员提供商集合。

相关问题