在MVC4 Web应用程序中使用带有GUID UserID的ASP.NET SqlMembershipProvider

时间:2013-05-15 21:45:51

标签: asp.net-mvc

我有一个现有的ASP.NET Web Forms站点我正在升级到ASP.NET MVC4 Web应用程序。

看起来应该可以将我现有的成员资格数据库与MVC4网络应用默认使用的SimpleMembershipProvider一起使用。

问题是SimpleMembershipProvider期望UserId列的类型为int,而我现有的数据库使用guid

以下是我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-simple-membership-

1 个答案:

答案 0 :(得分:4)

我找到了解决方法:

  • 将提供商类型更改回System.Web.Security.SqlMembershipProvider
  • 修改AccountController以使用MembershipFormsAuthentication类而不是WebSecurity
  • 执行操作
  • SimpleMembershipProvider
  • 中删除了AccountController属性

例如,要验证登录并设置cookie:

if (ModelState.IsValid && Membership.ValidateUser(model.UserName, model.Password)) 
{
    FormsAuthentication.SetAuthCookie(model.UserName,false);
    return RedirectToLocal(returnUrl);
}