升级到ASP.NET 4.5 / MVC 4个表单验证失败(Upgrading to ASP.NET

2019-06-27 03:38发布

我刚刚downoaded一个VS 2012的ASP.NET 4.5和MVC 4.0一起,并用一个示例应用程序初涉,发现窗体身份验证与ASP.NET 4.0完美的作品/ MVC 3似乎不再与合作最新发布的。

当我做出的动作控制器的登录功能的调用,WebSecurity.Login调用失败:

public ActionResult Login(LoginModel model, string returnUrl)
{
    if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
    {
        return RedirectToLocal(returnUrl);
    }

    // If we got this far, something failed, redisplay form
    ModelState.AddModelError("", "The user name or password provided is incorrect.");
    return View(model);
}

我把它换成这个代码在我的VS 2010源等同,而且也没有(用现在已经过时FormsAuthentication.Authenticate功能)。

我的问题是:有没有人移植一个MVC3到MVC4应用程序,并找到了解决方法这个问题? 我使用的是IIS Express中,所以我想这可能在某种程度上造成了一些问题,但如果你有任何想法,我将不胜感激。

我复制我的配置从我的工作asp.net 4 / MVC3应用程序如下,但没有运气(这里的相关部分):

  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=tcp:sql2k1201.dbprovider.net;Initial Catalog=SQL2012_db;User ID=SQL2012_db_user;Password=dbpassword;" providerName="System.Data.SqlClient" />
  </connectionStrings>

  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />

    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880"/>
    </authentication>

    <membership>
      <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="DefaultConnection"
           enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
           maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
           applicationName="/" />
      </providers>
    </membership>

    <profile>
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </profile>

    <roleManager enabled="true">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </roleManager>

Answer 1:

这里的问题是,默认mvc4互联网模板使用SimpleMembership管理会员/角色的信息。 模板中的代码有这种假设,只能用simplemembership工作。 当您安装通用的供应商账户控制器代码吹起来,因为它无法理解通用的供应商。 看看这篇文章,进一步解释了这种方案http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net- 4-5-web的表单和-ASP净MVC -4- templates.aspx



Answer 2:

如果你的窗体身份验证票需使用.NET Framework的旧版本的应用程序之间共享,你必须明确地配置您的.NET 4.5的应用程序使用较早的机器兼容模式,否则将无法进行加密/解密的形式身份验证票证。

在.NET 4.5应用程序的web.config,设置兼容模式属性:

<system.web>
 <machineKey compatibilityMode="Framework20SP2" /> 
</system.web>

这将使你的.NET 4.5的应用程序与由早期版本的.NET生成的表单身份验证票证工作。

注意:如果您的服务器没有安装的.NET Framework 2.0 SP2做,你将需要设置兼容模式“Framework20SP1”代替。

MSDN - MachineKeySection.CompatibilityMode房产



Answer 3:

对于我来说,我有一个问题,因为有一些变化,你需要(从web.config设置http://www.asp.net/whitepapers/mvc4-release-notes )

<appSettings>
  <add key="webpages:Version" value="2.0.0.0" />
  <add key="PreserveLoginUrl" value="true" />
</appSettings>

修复这些设置(它看起来并不像你所加)得到的东西为我工作,当我有登录问题。



文章来源: Upgrading to ASP.NET 4.5/MVC 4 forms authentication fails