Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 4.5 Web.Security.Membership.Providers删除抛出system.notsupported异常。为什么?_.net_Membership Provider - Fatal编程技术网

.net 4.5 Web.Security.Membership.Providers删除抛出system.notsupported异常。为什么?

.net 4.5 Web.Security.Membership.Providers删除抛出system.notsupported异常。为什么?,.net,membership-provider,.net,Membership Provider,为了更好地理解如何在.NETMVC4应用程序中连接身份验证功能,我想我应该拆开“Internet应用程序”模板生成的网站。最终,我将研究如何实现声明感知的东西(例如:) 作为本文的一部分,我发现自己正在研究WebMatrix.WebData.WebSecurity.PreAppStartInit()方法,该方法包含以下代码: const string BuiltInMembershipProviderName = "AspNetSqlMembershipProvider"; var b

为了更好地理解如何在.NETMVC4应用程序中连接身份验证功能,我想我应该拆开“Internet应用程序”模板生成的网站。最终,我将研究如何实现声明感知的东西(例如:)

作为本文的一部分,我发现自己正在研究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应用程序中却没有。有人有什么想法吗?

这也让我困惑了一阵子。关键在于初始化的时间。这需要在非常早期的阶段进行。当您在WebMatrix.WebData名称空间中挖掘时,还有一些其他部分需要查看,以了解它们是如何工作的

应用了一个程序集属性:

[程序集:预应用程序启动方法(typeof(PreApplicationStartCode),“Start”)]

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

您可以通过做同样的事情自己复制此功能。将PreApplicationStartMethod属性添加到程序集,并让它调用您自己的“启动”方法。在这个阶段,您将能够使用Membership providers集合