发布后 MVC4 简单成员资格不起作用
MVC4 simplemembership not working after publish
我在使用 MVC4 SimpleMembership 时遇到以下问题:Register 和 Login 方法在本地调试模式下工作正常,但在发布后它们会使站点崩溃。我所看到的原因是,例如,当我注册用户时,信息存储在我的用户配置文件 table 中,但 webpages_Membership table 中没有任何内容。所以看起来 WebSecurity 由于某种原因无法访问 webpages_Membership table.
我配置了一个基本的 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
添加了 class
public static void InitializeDatabase()
{
WebSecurity.InitializeDatabaseConnection("RMBase", "UserProfile", "UserID", "UserName", true);
}
添加了我的 DBContext class
public class RMDatabase : DbContext
{
public RMDatabase() : base("RMBase") { }
}
我的 Login/Register 方法如下所示:
[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);
}
有人看到我做错了什么可能是造成这种情况的原因吗?
安装Elmah.MVC,然后在Global.asax的Application_Error
事件中,添加
var exception = Server.GetLastError();
Elmah.ErrorSignal.FromCurrentContext().Raise(exception);
然后,在站点上导航到 /elmah
,现在应该会为您记录异常。
在遵循 Tieson T. 的建议后,我发现我的 Web 项目引用中缺少 System.Web.Helpers, Version=2.0.0.0。添加它,一切都很好。仍然不明白它在本地调试中是如何工作的,但我很高兴它已被修复。
我在使用 MVC4 SimpleMembership 时遇到以下问题:Register 和 Login 方法在本地调试模式下工作正常,但在发布后它们会使站点崩溃。我所看到的原因是,例如,当我注册用户时,信息存储在我的用户配置文件 table 中,但 webpages_Membership table 中没有任何内容。所以看起来 WebSecurity 由于某种原因无法访问 webpages_Membership table.
我配置了一个基本的 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
添加了 class public static void InitializeDatabase()
{
WebSecurity.InitializeDatabaseConnection("RMBase", "UserProfile", "UserID", "UserName", true);
}
添加了我的 DBContext class
public class RMDatabase : DbContext
{
public RMDatabase() : base("RMBase") { }
}
我的 Login/Register 方法如下所示:
[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);
}
有人看到我做错了什么可能是造成这种情况的原因吗?
安装Elmah.MVC,然后在Global.asax的Application_Error
事件中,添加
var exception = Server.GetLastError();
Elmah.ErrorSignal.FromCurrentContext().Raise(exception);
然后,在站点上导航到 /elmah
,现在应该会为您记录异常。
在遵循 Tieson T. 的建议后,我发现我的 Web 项目引用中缺少 System.Web.Helpers, Version=2.0.0.0。添加它,一切都很好。仍然不明白它在本地调试中是如何工作的,但我很高兴它已被修复。