ASP.Net MVC3控制器授权属性问题

时间:2012-08-17 20:46:21

标签: asp.net-mvc-3

我有一个带有这些动作的家庭控制器:

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功能。

2 个答案:

答案 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");
    }