我有一个带有这些动作的家庭控制器:
public class HomeController : Controller
{
[Authorize]
public ActionResult Index()
{
return View();
}
public ActionResult Logoff()
{
HttpContext.Session.Remove("LogonTicket");
HttpContext.Session.Remove("PID");
return View("Index");
}
现在,当我使用Logoff Action注销时,我希望Index的Authorize属性生效,但是当我在Logoff Action中返回Index View时它不会生效。
我该如何处理?
我正在使用自定义MembershipProvider而不确定如何在其中添加Logoff功能。
答案 0 :(得分:1)
您应该重定向,而不是直接返回视图:
public ActionResult Logoff()
{
HttpContext.Session.Remove("LogonTicket");
HttpContext.Session.Remove("PID");
return RedirectToAction("Index");
}
直接返回视图会立即将视图的标记发送到客户端,并且根本不会调用Authorize
过滤器。
答案 1 :(得分:0)
在AccountController注销操作中完成。它们现在也是基本控制器中的公共“全局”。
public ActionResult LogOff()
{
FormsAuthentication.SignOut();
LogonTicket = null;
ParticipantID = null;
return RedirectToAction("Index", "Home");
}