我有一个 ASP.NET MVC4 应用程序。我创建了一个登录页面。如果用户登录系统,我将用户信息注册到会话中。我添加了一个过滤器来检查会话变量。如果用户没有登录系统,我想将用户重定向到我的登录控制器。
public class SecurityAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Session["User"] == null)
{
filterContext.HttpContext.Response.RedirectToRoute("Default", new
{
controller = "Login",
action = "DoLogin",
returnUrl = filterContext.HttpContext.Request.Url.AbsoluteUri
});
}
base.OnActionExecuting(filterContext);
}
}
我在控制器级别使用此属性。
[SecurityAttribute]
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Name"] = ((UserEntity)Session["User"]).Name;
ViewData["Surname"] = ((UserEntity)Session["User"]).Surname;
return View();
}
}
OnActionExecuting 方法在操作执行之前触发,但重定向发生在我的家庭控制器中的操作方法之后。因为会话变量为空,所以我在索引操作中遇到错误。我怎样才能解决这个问题?