我有一个带有前端和后端的MVC3 Web应用程序.在后端,如果用户未登录(它检查会话),则每个操作都受if..then..else重定向到另一个操作的保护.它没有Windows角色.
我想知道是否可以创建一个执行检查的属性并将用户重定向到登录页面而不必在每个操作中反复插入相同的代码?
编辑#1
我已经创建了一个我的管理员控制器派生的基本控制器,并添加了以下成员后面的病毒说:
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
try
{
if (Session["loggedIn"] == null || (bool)Session["loggedIn"] != true)
{
TempData["targetAction"] = ControllerContext.ParentActionViewContext.RouteData.Values["action"] + "/" + ControllerContext.ParentActionViewContext.RouteData.Values["controller"];
RedirectToRoute("Admin/Login");
}
}
catch (NullReferenceException)
{
RedirectToRoute("Admin/Login");
}
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码不起作用.有人可以告诉我有什么问题吗?
你可以轻松地做到这一点.
无需使用属性
只需创建一个继承自Controller类的公共BaseController,并从BaseController继承所有控制器
覆盖BaseController中的OnActionExecuting事件,并在其上放置授权逻辑.
每次调用操作时都会执行OnActionExecuting事件.
如果您需要重定向到Action,此代码将有所帮助
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "action", "Index" }, { "controller", "Account" } });
Run Code Online (Sandbox Code Playgroud)