【问题标题】:redirect all pages based on global boolean根据全局布尔值重定向所有页面
【发布时间】:2016-05-02 09:34:40
【问题描述】:

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

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

我已经尝试过了,但它不起作用(控制器加载 forst 并基于此布尔值引发大量错误)请帮助。

【问题讨论】:

  • 不清楚。如果您想检查一个状态以保持在当前页面或将其重定向到另一个页面,您可以使用很多方法,例如,您可以使用 cookie 和 JS 来做到这一点。
  • 我不想使用 cookie 存储,这只是在会话缓存中。但是当有人访问我的网站时,如果boolean 为假,我希望他们被重定向到某个页面。我需要这样做无论他们尝试打开哪个页面
  • 布尔值写入哪里?如果它是服务器端的,那么最好在控制器而不是视图中执行此操作
  • @Stewart_R 这是服务器端,我知道它应该在控制器中,而且效果很好。但我想在这里尊重 DRY,并且只在我的代码中使用它一次。是否有一种所有请求都经过的“全局控制器”?是否可以使用这个重定向到不同的控制器?
  • 您有几个选择。首先,我应该说控制器只是类,因此您可以拥有一个实现全局重定向功能的基本控制器,然后您的所有其他控制器都可以从它继承。不过,您最好调查一下过滤器:asp.net/mvc/overview/older-versions-1/controllers-and-routing/… 这两个选项都可以让您保持干燥

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


【解决方案1】:

这可以使用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)
    {

    }
}

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

【讨论】:

    猜你喜欢
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 2023-03-21
    • 2018-03-28
    • 2012-10-29
    • 1970-01-01
    相关资源
    最近更新 更多