我有一个现有的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'”。
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-
答案 0 :(得分:4)
我找到了解决方法:
System.Web.Security.SqlMembershipProvider
AccountController
以使用Membership
和FormsAuthentication
类而不是WebSecurity
类SimpleMembershipProvider
AccountController
属性
例如,要验证登录并设置cookie:
if (ModelState.IsValid && Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName,false);
return RedirectToLocal(returnUrl);
}