检查控制器的所有操作的会话

fre*_*cer 5 c# asp.net-mvc

我有一个简单的MVC应用程序,我想首先检查会话作为此操作

 public ActionResult Index()
        {
            if (Session["UserInfo"] == null)
            {
              return  RedirectToAction("Login", "Users");
            }
            return View();
        }
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有办法对所有操作强制执行此检查而不对每个操作进行手动操作?

Usm*_*man 11

您可以使用OnActionExecuting并且也可以覆盖此方法来编写自定义逻辑,以便创建一个类

 public class SessionCheck: ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            HttpSessionStateBase session = filterContext.HttpContext.Session;
            if (session != null && session["UserInfo"] == null)
            {
                filterContext.Result = new RedirectToRouteResult(
                    new RouteValueDictionary {
                                { "Controller", "Users" },
                                { "Action", "Login" }
                                });
            }
        }
    } 
Run Code Online (Sandbox Code Playgroud)

在类中添加名称空间

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
Run Code Online (Sandbox Code Playgroud)

并在你的控制器中添加这样的[SessionCheck]属性

 [SessionCheck]
 public class HomeController : Controller
  {
  }
Run Code Online (Sandbox Code Playgroud)

这将检查控制器的所有操作的会话,或者您也可以在此操作上添加此属性

[SessionCheck]
public ActionResult Index()
 {
 } 
Run Code Online (Sandbox Code Playgroud)