基于全局布尔值

时间:2016-05-02 09:34:41

标签: c# html asp.net-mvc redirect

如果我的全局变量默认为false但稍后更改,是否可以使用此变量自动重定向?这基本上就是我想要的:

@if (!boolean)
{
  <meta http-equiv='refresh' value='0; redirect_to_this_url'>
}

我已经尝试了这个,它不起作用(控制器加载forst并根据此布尔值抛出大量错误)请帮忙。

1 个答案:

答案 0 :(得分:2)

可以使用Action Filters

解决此问题

例如,考虑当我们用Asp.Net 4.5.2 MVC项目的App_Start文件夹替换默认的FilterConfig.cs文件时会发生什么:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new RedirectActionFilter());
    }
}

public class RedirectActionFilter : IActionFilter
{
    static Random rng = new Random();
    static bool GetBool() => rng.Next() % 2 == 0;

    public void OnActionExecuted(ActionExecutedContext filterContext)
    {

        if (GetBool())
        {
            filterContext.Result = new RedirectResult("http://www.bbc.co.uk");
        }

    }

    public void OnActionExecuting(ActionExecutingContext filterContext)
    {

    }
}

然后在Asp.Net应用程序响应浏览器之前调用OnActionExecuted()类的RedirectActionFilter方法。因此,如果GetBool()返回true,那么我们将重定向到bbc.co.uk,否则没有任何更改,我们将从处理我们的请求的任何控制器操作获得正常的操作结果