【问题标题】:asp.net mvc custom profile providerasp.net mvc 自定义配置文件提供程序
【发布时间】:2011-05-26 15:45:34
【问题描述】:

我想在我的 asp.net mvc 3 应用程序中拥有自定义配置文件提供程序。问题是,我不想使用由 ASP.NET Membership/Role/Profile 提供程序生成的默认 DB,主要是因为 WebService 已经完成了身份验证,并且 DB 已经存在。

我想要用户配置文件属性以填充它们并在网站的不同区域中使用。

我查看了这个示例 (How to assign Profile values?),但我收到了这个错误:

尝试为文件附加自动命名的数据库 C:\Projects\FWManager\App_Data\aspnetdb.mdf 失败。一个数据库 存在同名文件,或者指定的文件无法打开,或者是 位于 UNC 共享上。

这是 web.config

  <profile inherits="FWMembership.Membership.FWProfileProvider" defaultProvider="AspNetSqlProfileProvider" automaticSaveEnabled="false" enabled="true">
   <providers>
    <clear/>
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
   </providers>
  </profile>

这是我的自定义类

public class FWProfileProvider : ProfileBase
{
    [SettingsAllowAnonymous(false)]
    public string FirstName
    {
        get { return base["FirstName"] as string; }
        set { base["FirstName"] = value; }
    }

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

    [SettingsAllowAnonymous(false)]
    public int? UserID
    {
        get { return base["UserID"] as int?; }
        set { base["UserID"] = value; }
    }

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

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

    public StringCollection Entitlements
    {
        get { return base["Entitlements"] as StringCollection; }
        set { base["Entitlements"] = value; }
    }

    public string username;

    public FWProfileProvider()
    {
    }

    public FWProfileProvider(string username)
    {
        this.username = username;
    }

    static public FWProfileProvider CurrentUser
    {
        get
        {
            return (FWProfileProvider)
                   (ProfileBase.Create("Joe"));
        }
    }

}

关键是要避免使用 asp.net 默认成员表。 有什么想法吗?

编辑: 忘记添加 - 此 Web 应用程序,但配置文件提供程序放置在同一解决方案中的类库项目中: 解决方案 |->FWProfile(类库项目) |->UI (asp.net mvc 3 web 应用)

【问题讨论】:

    标签: asp.net asp.net-mvc-3 asp.net-profiles


    【解决方案1】:

    我认为您还必须编写自己的 MemberShip Provider。您的 web.config 指的是默认的 asp.net 成员资格提供程序。如何编写会员提供程序,您可以在这里找到custom membership provider

    默认成员资格提供程序使用连接字符串连接到本地安装的 SQL Express 数据库,这会导致您的错误。

    您的 web.config 将如下所示:

    <membership defaultProvider="MyCustomMembershipProvider">
      <providers>
        <clear />
        <add name="MyCustomMembershipProvider"
          type="FWMembership.Membership.MyCustomMembershipProvider"
          enablePasswordRetrieval="true"
          enablePasswordReset="true"
          requiresQuestionAndAnswer="false"
          requiresUniqueEmail="true"
          passwordFormat="Clear"/>
      </providers>
    </membership>
    <profile defaultProvider="MyProfileProvider" enabled="true">   
       <providers>    
          <clear/>    
             <add name="MyProfileProvider" type="FWMembership.Membership.FWProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />   
       </providers>  
     </profile>
    

    希望这会有所帮助。

    【讨论】:

    • 所以我的假设是,我必须实现自定义成员资格提供程序并使其适应当前应用程序(使用 WebService 进行身份验证,而不是直接调用 DB)。我说的对吗?
    • 如果不想使用标准的用户管理,就得自己写provider,没错。
    • 现在变得越来越有趣了。出现不同的错误 - 解析器错误消息:提供程序必须实现类“System.Web.Profile.ProfileProvider”。
    • 您的 web.config 看起来如何?您的配置 指的是 System.Web.Profile.SqlProfileProvider。
    猜你喜欢
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多