MVC路由和会话

时间:2016-05-30 07:25:54

标签: asp.net-mvc asp.net-mvc-4 session asp.net-mvc-routing

我正在使用Windows身份验证开发MVC应用程序。我们有一个为Windows身份验证开发的登录模块,因此当任何用户尝试访问此应用程序时,会重定向到windows auth的登录页面,在其他地方托管。在验证用户之后,它返回用户信息,在这里我为用户创建会话。这很好。

现在考虑2个场景 1.如果用户尝试访问http://localhost:63145/Home/Index,他将被重定向到登录页面,并将控制权返回到 Home Controller的Index方法,我创建会话。

  1. 如果用户尝试访问http://localhost:63145/Product/Index,则会将其重定向到登录页面,并将控制权返回到产品控制器的Index方法,我不创建任何会话。
  2. 因此,在案例2中,不会创建用户的会话。这里有什么更好的方法?

1 个答案:

答案 0 :(得分:1)

像这样创建一个BaseController;

public class BaseController : Controller
    {
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            InitAppController(filterContext);
            base.OnActionExecuting(filterContext);
        }

        // Redirect to login page if user's session is not valid.
        public void InitAppController(ActionExecutingContext filterContext)
        {
            if (/* Check Session Condition Here */)
            {
                filterContext.Result = RedirectToAction("Index", "Login");
            }
        }
    }

然后,更改所有控制器;

HomeController : ControllerHomeController : BaseController

ProductController : ControllerProductController : BaseController