动态地将自定义ActionFilterAttribute添加到重定向的操作

时间:2015-08-24 00:58:59

标签: c# model-view-controller actionfilterattribute

我在帐户控制器中有一个登录操作,根据用户权限重定向到不同的操作。我们处于这样一种情况:我们希望在重定向的操作响应结束时附加自定义html。我们有一个自定义的ActionFilterAttribute可以解决问题,但问题是我们事先不知道重定向的操作来注册自定义属性。那么如何将自定义ActionFilterAttribute动态注册到重定向的操作

提前致谢

这是过滤器

 public class AppendModalWindow : ActionFilterAttribute
{
        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            base.OnResultExecuted(filterContext);

            HubController objHubController = filterContext.Controller as HubController;
            if (objHubController != null)
            {
                AccountController objAccController = new AccountController();
                objAccController.ControllerContext = objHubController.ControllerContext;

                if (objAccController.IsContractExpryChkReqd)
                {
                    string strScript = objAccController.GetContractStatusModalWindow();
                    if (!string.IsNullOrEmpty(strScript))
                    {
                        filterContext.HttpContext.Response.Write(strScript);
                    }
                }

            }
        }

    }

这是行动

   [AppendModalWindow]
    public ActionResult Login(string userName, string password, bool rememberMe, string returnUrl)
    {
       if(somecondition)
       {
              redirect(dynamic_Url);
       }
    }

2 个答案:

答案 0 :(得分:0)

您的控制器中只应有一个操作,它接收请求,并在其上定义属性。然后,您应该在控制器操作中使用if语句来实现条件逻辑。如果逻辑很广泛,您可以为每个方案创建一个单独的服务类。

答案 1 :(得分:0)

如果您无法提前确定重定向网址的位置,则可以在web.config中添加该设置,并让您的网络应用的负责用户/管理员输入。

 <appSettings>        
    <add key="Redirect" value="http://path/path/path"/>
 </appSettings>

并在登录操作中获取它。

[AppendModalWindow]
public ActionResult Login(string userName, string password, bool rememberMe, string returnUrl)
{       
   if(somecondition)
   {
      var url = ConfigurationManager.AppSettings["Redirect"];
      redirect(url);
   }
}