asp.net mvc自定义配置文件提供程序

时间:2011-05-26 15:45:34

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

我想在我的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应用程序,但是配置文件提供程序放在同一个集合中的类库项目中: 解 | - &gt; FWProfile(类库项目) | - &gt; UI(asp.net mvc 3 web应用程序)

1 个答案:

答案 0 :(得分: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>

希望这有帮助。