控制器function上方的自定义属性

我想将[FirstTime]属性置于控制器函数之上,然后创建一个FirstTimeAttribute ,它具有一些逻辑,用于检查用户是否输入了他的名字,如果没有, /Home/FirstTime其重定向到/Home/FirstTime

所以不要做:

 public ActionResult Index() { // Some major logic here if (...) return RedirectToAction("FirstTime", "Home"); return View(); } 

我会这样做:

 [FirstTime] public ActionResult Index() { return View(); } 

这可能吗?

当然。 做点什么

 public class FirstTimeAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { if(filterContext.HttpContext.Session != null) { var user = filterContext.HttpContext.Session["User"] as User; if(user != null && string.IsNullOrEmpty(user.FirstName)) filterContext.Result = new RedirectResult("/home/firstname"); else { //what ever you want, or nothing at all } } } } 

只需对您的操作使用[FirstTime]属性即可

属性代码:

  public class FirstTimeAttribute : ActionFilterAttribute, IActionFilter { public override void OnActionExecuting(ActionExecutingContext filterContext) { if (string.IsNullOrEmpty(filterContext.HttpContext.Request[name])) { filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary { { "controller", "Home" }, { "action", "FirstTime" }, { "area", string.Empty } }); } } } 

用法:

 [FirstTime] public ActionResult Index(string name) { return View(); }