【问题标题】:SimpleMembershipProvider in WebSite with Profile带有配置文件的网站中的 SimpleMembershipProvider
【发布时间】:2013-08-07 16:17:03
【问题描述】:

我在 VS2012 中创建了一个新网站——不是项目——添加了连接字符串,创建了表,然后使用 ASPNET CONFIGURATION 创建了几个角色和一个用户,这反过来又自动在我的数据库中创建了相应的表:用户、UsersInRoles、角色、成员资格和角色。几乎按预期工作。对于 4.5 (SimpleMembershipProvider),它不会创建所有存储过程,并且额外的代码用于旧的 MemberShipProvider。

我想在 Profile 提供者中添加一些字段,就像我在 MembershipProvider 中使用的一样:

 <properties>
    <add name="myWhatEver" type="System.Int32" allowAnonymous="false"/>
  </properties>

但是当我尝试调用后面的代码时,它说“配置文件”不存在。所以我在网上搜索并使用VS2012阅读,如果你创建一个网站,而不是一个项目,它默认不附带配置文件,所以你必须创建一个自定义的。

之后我在 AppCode cs 中添加了以下代码:

命名空间 myNameSpace {

public class UserProfile : ProfileBase
{
    public static UserProfile GetUserProfile(string username)
    {
        return Create(username) as UserProfile;
    }
    public static UserProfile GetUserProfile()
    {
        return Create(Membership.GetUser().UserName) as UserProfile;
    }

    [SettingsAllowAnonymous(false)]
    public string myWhatEver1
    {
        get { return base["myWhatEver1"] as string; }
        set { base["myWhatEver1"] = value; }
    }
}

在 WebConfig 中:

<profile defaultProvider="MYProfileProvider" inherits="myNameSpace.UserProfile">
  <providers>
    <clear />
    <add name="MYProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="MYDBConn"/>
  </providers>
</profile>
<membership defaultProvider="MYMembershipProvider">
  <providers>
    <clear />
    <add name="MYMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="MYDBConn"  applicationName="/"/>
  </providers>
</membership>
<roleManager defaultProvider="MYRoleProvider">
  <providers>
    <clear />
    <add name="MYRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="MYDBConn" applicationName="/"/>
  </providers>
</roleManager>

我转到后面的页面,它会识别我的自定义配置文件!在我运行页面并得到这个之前,我都退出了:

找不到存储过程“dbo.aspnet_CheckSchemaVersion”。

现在呢?很确定 SimpleMembershiProvider 不使用像 MembershipProvider 这样的存储过程,我真的不想在数据库中安装 MembershipProvider。必须有一些东西我可以添加到我的代码中,以便它按原样工作。

有什么建议吗??

谢谢。

【问题讨论】:

    标签: asp.net .net-4.5 simplemembership sqlprofileprovider


    【解决方案1】:

    您的 web.config 配置为使用默认提供程序而不是 SimpleMembership 提供程序。要使用 SimpleMembership,您的 web.config 应该如下所示。

       <roleManager enabled="true" defaultProvider="SimpleRoleProvider">
      <providers>
        <clear/>
        <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
      </providers>
    </roleManager>
    <membership defaultProvider="SimpleMembershipProvider">
      <providers>
        <clear/>
        <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
      </providers>
    </membership>
    

    SimpleMembership 提供者不会尝试调用默认提供者使用的存储过程。

    此外,在使用 SimpleMembership 时,您不能使用 ASP.NET 配置来创建用户和角色。您必须创建自己的应用程序来执行此操作,或者在创建为described in this article 时为数据库播种。本文以及 Internet 上的大多数其他文章都旨在将 SimpleMembership 与 MVC 结合使用,而不是 Web 窗体。但正如this QA 指出的那样,它应该适用于 Web 表单。

    【讨论】:

    • 它是一个网站,而不是一个项目,所以我不会让我安装 NuGet 包。
    • 它必须是网站而不是 Web 应用程序项目吗?这是来自 Microsoft 的说明,他们建议继续使用 Web 应用程序项目,因为您遇到的问题正是 [msdn.microsoft.com/en-us/library/dd547590.aspx].
    • 我将尝试创建一个新项目,看看它是否有效。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 2023-03-30
    • 2022-01-14
    • 2018-01-23
    相关资源
    最近更新 更多