我想在我的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应用程序)
答案 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>
希望这有帮助。