【问题标题】:Custom Attribute above a controller function控制器功能上方的自定义属性
【发布时间】:2012-10-29 21:26:19
【问题描述】:

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

所以不要这样做:

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

    return View();
}

我会这样做:

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

这可能吗?

【问题讨论】:

    标签: c# asp.net-mvc-4 custom-attributes


    【解决方案1】:

    当然。做类似的事情

    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] 属性

    【讨论】:

    • 太棒了,非常感谢。添加filterContext.Result = new RedirectResult(...); 后,它就像一个魅力...谢谢!
    • 很高兴我能帮上忙。很抱歉没有首先添加它;让我失去了理智(在做别的事情)
    【解决方案2】:

    属性代码:

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

    【讨论】:

    • 实现 IActionFilter 是多余的。 ActionFilterAttribute 已经实现了这个接口,你的 FirstTimeAttribute 继承自 ActionFilterAttribute :)
    猜你喜欢
    • 2013-09-30
    • 1970-01-01
    • 2011-09-05
    • 2016-02-23
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    相关资源
    最近更新 更多