3

既存の ASP.NET Web フォーム サイトがあり、ASP.NET MVC4 Web アプリケーションにアップグレード中です。

SimpleMembershipProviderMVC4 Web アプリがデフォルトで使用する既存のメンバーシップ データベースを使用できるようです。

問題は、既存のデータベースUserIdが.intguid

my の関連部分は次のweb.configとおりです。

<membership defaultProvider="SqlMembershipProvider">
  <providers>
    <remove name="SqlMembershipProvider"/>
    <add
      name="SqlMembershipProvider"
      connectionStringName="LocalSqlServer"
      enablePasswordRetrieval="false"
      enablePasswordReset="true"
      requiresQuestionAndAnswer="false"
      requiresUniqueEmail="false"
      passwordFormat="Hashed"
      applicationName="/"
      maxInvalidPasswordAttempts="10"
      minRequiredPasswordLength="1"
      minRequiredNonalphanumericCharacters="0"
      passwordAttemptWindow="10"
      passwordStrengthRegularExpression=""
      type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/>
  </providers>
</membership>

たとえば、パスワードを変更しようとすると、次のようになりますRuntimeBinderException

「タイプ 'System.Guid' を 'int' に変換できません」.

私の主な質問は次のとおりです。理想的には、既存のデータベースをそのまま維持し、MVC Web アプリをそれと連携するように構成したいと考えています。MVC4 Web アプリを構成して、既存のデータベース (を含むGUID UserId) をメンバーシップ データベースとして使用するにはどうすればよいですか?

UserId二次的な質問として、列をint;に変更できると思います。誰かがそれに関する問題を予見していますか、それについて最善の方法を知っていますか?


UserIdこれは、タイプを使用して見つけることができる最高のリードでしたGUID: http://aspnet.uservoice.com/forums/41201-asp-net-mvc/suggestions/3573751-use-generic-types-for-userid-in-シンプルメンバーシップ

4

1 に答える 1

4

回避策を見つけました:

  • プロバイダーの種類を に戻しましたSystem.Web.Security.SqlMembershipProvider
  • クラスの代わりにおよびクラスAccountControllerを使用してアクションを実行するように を変更します。MembershipFormsAuthenticationWebSecurity
  • SimpleMembershipProviderから属性を削除しましたAccountController

たとえば、ログインを検証して Cookie を設定するには、次のようにします。

if (ModelState.IsValid && Membership.ValidateUser(model.UserName, model.Password)) 
{
    FormsAuthentication.SetAuthCookie(model.UserName,false);
    return RedirectToLocal(returnUrl);
}
于 2013-12-30T22:59:32.783 に答える