Asp.net mvc 4 如何在MVC4中更改AccountController的默认重定向行为
我正在开发一个Asp.net mvc 4 如何在MVC4中更改AccountController的默认重定向行为,asp.net-mvc-4,forms-authentication,simplemembership,Asp.net Mvc 4,Forms Authentication,Simplemembership,我正在开发一个ASP.netmvc4应用程序。我使用了SimpleMembershipProvider和默认的AccountController,但想稍微修改一下行为 现在我的应用程序有两个逻辑部分-用户部分和管理面板。我也有两个角色-用户和管理员,我所有的管理员面板逻辑都在AdminController中 只有提供正确的URL才能访问管理面板,例如-localhost:51200/admin,因此我显示了一个Login页面 所以问题是,我没有像默认模板创建的那样的标准登录页面。现在我修改了Ac
ASP.netmvc4
应用程序。我使用了SimpleMembershipProvider
和默认的AccountController
,但想稍微修改一下行为
现在我的应用程序有两个逻辑部分-用户部分和管理面板。我也有两个角色-用户和管理员,我所有的管理员面板逻辑都在AdminController
中
只有提供正确的URL才能访问管理面板,例如-localhost:51200/admin
,因此我显示了一个Login
页面
所以问题是,我没有像默认模板创建的那样的标准登录页面。现在我修改了AccountController
,如下所示:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
string controllerName = HttpContext.Request.RequestContext.RouteData.Values["controller"].ToString();
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
//return RedirectToLocal(returnUrl);
return RedirectToAction("ManageContent", "Admin");
}
//string controllerName = HttpContext.Request.RequestContext.RouteData.Values["controller"].ToString().ToLower();
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return RedirectToAction("Index", "Home");
}
我希望能够根据用户尝试登录的位置,确定如果身份验证/授权失败,用户将被重定向到哪里。在我的AdminController
中,我有[Authorize(Roles=“Admin”)]
,因此无论标准用户是否转到localhost:5555/Admin
并提供了正常凭据,但没有必要的级别或只是不正确的登录信息,如果从localhost:6477/admin
尝试登录,我希望能够将用户重定向到特定的控制器/操作(很可能再次是localhost:54555/admin
),并且如果用户尝试从其他地方登录,无论在何处,我都希望设置另一个重定向位置
我有这个:
string controllerName = HttpContext.Request.RequestContext.RouteData.Values["controller"].ToString();
只是为了检查我是否能够获得控制器,这似乎是可能的,因此这可能是部分解决方案,但我不知道如果重定向来自
[Authorize(Roles=“Admin”)]
您应该查看区域。这允许您拥有两个同名的控制器/视图,并且可以根据角色进行分离但是,如果我们只针对这个特定的问题进行讨论,那么如果我只为-AdminController
编写一个登录逻辑,它将仅在您尝试登录管理面板时使用,而在AccountController
中为应用程序的其余部分编写另一个登录逻辑时使用,这不一样吗。我认为我将在这里完成的是通过在两个地方没有相同的代码来保持它的干燥。