【问题标题】:MVC4 simplemembership not working after publish发布后 MVC4 simplemembership 不起作用
【发布时间】:2015-07-21 04:49:08
【问题描述】:

我在使用 MVC4 SimpleMembership 时遇到以下问题:注册和登录方法在本地调试模式下工作正常,但在发布后它们会使站点崩溃。我看到的原因是,例如,当我注册用户时,信息存储在我的 UserProfile 表中,但在 pages_Membership 表中没有任何内容。因此,WebSecurity 似乎由于某种原因无法访问 pages_Membership 表。

我配置了一个基本的 MVC4 项目以使用 SimpleMembership,方法是在我的 WebConfig 文件中启用它,如下所示:

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
  </providers>
</membership>
<roleManager defaultProvider="DefaultRoleProvider">
  <providers>
    <add name="DefaultRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" />
  </providers>
</roleManager>

添加了我的连接字符串:

<add name="RMBase" providerName="System.Data.SqlClient" connectionString="Data Source=SQL5003.Smarterasp.net;Initial Catalog=DB_9C0558_test;User Id=DB_9C0558_test_admin;Password=*****" />

在 Global.asax 中初始化连接: AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        WebSecurityConfig.InitializeDatabase();

在我的 App_Start 文件夹中,我添加了 WebSecurityConfig 类

 public static void InitializeDatabase()
    {
        WebSecurity.InitializeDatabaseConnection("RMBase", "UserProfile", "UserID", "UserName", true);

    }

添加了我的 DBContext 类

public class RMDatabase : DbContext
{
    public RMDatabase() : base("RMBase") { }
}

我的登录/注册方法如下所示:

  [HttpGet]
    public ActionResult Login()
    {
        return View(new Authentication());
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Login(Authentication model)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }

        if (WebSecurity.Login(model.Username, model.Password))
        {
            return RedirectToAction("Index","Home");
        }
        else
        {
            ViewBag.ErrorMessage = "incorect";
            return View(model);
        }

    }

    [HttpGet]
    public ActionResult Register()
    {
        return View(new Registration());
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Register(Registration model)
    {
        if (ModelState.IsValid)
        {
            if (!WebSecurity.UserExists(model.Username))
            {
                WebSecurity.CreateUserAndAccount(model.Username, model.Password);
                WebSecurity.Login(model.Username, model.Password);
                return RedirectToAction("Index","Home");
            }
            ViewBag.ErrorMessage = "incorect";
        }
        return View(model);
    }

有人看到我做错了什么可能是造成这种情况的原因吗?

【问题讨论】:

    标签: asp.net-mvc-4 simplemembership


    【解决方案1】:

    安装Elmah.MVC,然后在Global.asax的Application_Error事件中,添加

    var exception = Server.GetLastError();
    Elmah.ErrorSignal.FromCurrentContext().Raise(exception);
    

    然后,在网站上导航到 /elmah,现在应该会为您记录异常。

    【讨论】:

      【解决方案2】:

      在遵循 Tieson T. 的建议后,我发现我的 Web 项目引用中缺少 System.Web.Helpers, Version=2.0.0.0。添加它,一切都很好。仍然不明白它在本地调试中是如何工作的,但我很高兴它已得到修复。

      【讨论】:

      • 由于您安装了 Visual Studio,System.Web.Helpers 可能在 G.A.C. (全局程序集缓存),而它(通常)在 G.A.C.在服务器上。因此,它在本地工作但在部署时不起作用的原因。 MVC5 工具在确保所有需要的程序集都标记为“复制本地”方面做得更好;如果可能的话,我建议在某个时候更新。
      • 有一天我会,但现在 MVC4 足以完成工作。使用 elmah 可以挽救生命,所以感谢您抽出时间来帮助我。
      猜你喜欢
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      • 1970-01-01
      • 2012-09-02
      相关资源
      最近更新 更多