如果我的全局变量默认为false但稍后更改,是否可以使用此变量自动重定向?这基本上就是我想要的:
@if (!boolean)
{
<meta http-equiv='refresh' value='0; redirect_to_this_url'>
}
我已经尝试了这个,它不起作用(控制器加载forst并根据此布尔值抛出大量错误)请帮忙。
答案 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,否则没有任何更改,我们将从处理我们的请求的任何控制器操作获得正常的操作结果