2011-05-26 74 views
0

我想在我的asp.net mvc 3應用程序中有自定義配置文件提供程序。問題是,我不想使用由ASP.NET Membership/Role/Profile提供程序生成的默認數據庫,這主要是因爲身份驗證已經使用WebService完成,並且數據庫已經存在。asp.net mvc自定義配置文件提供程序

我想要用戶配置文件屬性來填充它們並在站點的不同區域內使用。

我接過來一看這個例子(How to assign Profile values?),但我收到此錯誤:

An attempt to attach an auto-named database for file C:\Projects\FWManager\App_Data\aspnetdb.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.

這裏是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應用程序,但概況提供者被放置在同一soulution內的類庫項目: 解決方案 | - > FWProfile(類庫項目) | - > UI(ASP .net mvc 3 web應用程序)

回答

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> 

希望這有助於。

+0

所以我的假設是,我必須實現自定義成員資格提供程序並將其調整到當前應用程序(使用WebService進行身份驗證,而不是直接調用數據庫)。我對麼? – 303 2011-05-26 18:13:27

+0

如果你不想使用標準的用戶管理,你必須編寫自己的提供者,這是正確的。 – slfan 2011-05-27 05:13:31

+0

現在它變得更有趣了。獲取不同的錯誤 - 解析器錯誤消息:提供者必須實現類「System.Web.Profile.ProfileProvider」。 – 303 2011-05-27 10:00:42

相關問題