0

asp.net mvc 3 アプリにカスタム プロファイル プロバイダーが必要です。問題は、ASP.NET メンバーシップ/ロール/プロファイル プロバイダーによって生成された既定の 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 アプリケーション)

4

1 に答える 1

1

独自の MemberShip Provider も作成する必要があると思います。web.config は、既定の asp.net メンバーシップ プロバイダーを参照します。ここで見つけることができるメンバーシップ プロバイダーの作成方法カスタム メンバーシップ プロバイダー

既定のメンバーシップ プロバイダーは、ローカルにインストールされた 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>

お役に立てれば。

于 2011-05-26T15:57:26.953 に答える