控制器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(); }