【问题标题】:Dynamically Add Custom ActionFilterAttribute to Redirected Action将自定义 ActionFilterAttribute 动态添加到重定向操作
【发布时间】:2015-08-24 00:58:58
【问题描述】:

我在帐户控制器中有一个登录操作,它根据用户权限重定向到不同的操作。我们处于想要在重定向操作响应的末尾附加自定义 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);
       }
    }

【问题讨论】:

    标签: c# model-view-controller actionfilterattribute


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。主要问题是 html 被添加到请求的操作响应而不是重定向的操作?有没有想过这个?
    【解决方案2】:

    如果您无法提前确定 URL 的重定向位置,则可以在 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);
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      相关资源
      最近更新 更多