MVC 路由和会话
MVC Routing and session
我正在开发具有 Windows 身份验证的 MVC 应用程序。我们有一个为 windows auth 开发的登录模块,因此当任何用户尝试访问此应用程序时,都会被重定向到 windows auth 的登录页面,托管在别处。在它验证用户之后,它 returns 用户信息,我在这里为用户创建会话。这很好用。
现在考虑两种情况
1. 如果用户尝试访问 http://localhost:63145/Home/Index ,他将被重定向到登录页面,并且 return 控制返回到我创建会话的 Home Controller 的 Index 方法。
- 如果用户尝试访问 http://localhost:63145/Product/Index, ,他将被重定向到登录页面,并且 return 控制返回到 Product controller 的 Index 方法,我没有在其中创建任何会话.
因此,在情况 2 中,不会创建用户的会话。什么应该是更好的方法?
像这样创建一个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 : Controller
到 HomeController : BaseController
ProductController : Controller
到 ProductController : BaseController
我正在开发具有 Windows 身份验证的 MVC 应用程序。我们有一个为 windows auth 开发的登录模块,因此当任何用户尝试访问此应用程序时,都会被重定向到 windows auth 的登录页面,托管在别处。在它验证用户之后,它 returns 用户信息,我在这里为用户创建会话。这很好用。
现在考虑两种情况 1. 如果用户尝试访问 http://localhost:63145/Home/Index ,他将被重定向到登录页面,并且 return 控制返回到我创建会话的 Home Controller 的 Index 方法。
- 如果用户尝试访问 http://localhost:63145/Product/Index, ,他将被重定向到登录页面,并且 return 控制返回到 Product controller 的 Index 方法,我没有在其中创建任何会话.
因此,在情况 2 中,不会创建用户的会话。什么应该是更好的方法?
像这样创建一个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 : Controller
到 HomeController : BaseController
ProductController : Controller
到 ProductController : BaseController