我知道这里有人问过类似的问题,但我仍然无法让它发挥作用。
我正在使用面向移动设备的 ASP.NET MVC 3 编写一个 html 5 网站。
我之前曾问过另一个关于如何存储和检索昂贵数据的问题,并决定使用 Session 变量。
我完成了应用程序并开始了内部测试,一切都很好,直到我们意识到该网站无法在某些 iPhone 上运行。经过研究,我意识到 Session 变量依赖于 cookie,并且某些 iPhone 默认情况下禁用了 cookie。
在我想出更好的解决方案之前,我想检查是否启用了 cookie 并重定向到错误页面。
我希望执行此操作的所有代码都可以编写在基本控制器中,但我不知道该怎么做。因此,我将以下代码放入基本控制器中...
protected void WriteCookie()
{
Response.Cookies.Add(new HttpCookie("cookie_test"));
}
protected bool CookieCheck()
{
return (Request.Cookies["cookie_test"] != null);
}
然后在家庭控制器中,我在加载视图之前调用 WriteCookie 方法。视图本身具有重定向到两个控制器/操作之一的 javascript。通常会调用的控制器/视图(因为 html 5 无法解析位置)是 ChangeLocation / Index 控制器/动作。在那里我有以下代码......
if (!CookieCheck())
{
RedirectToAction("CookieRequired", "Error");
}
即使禁用了 cookie,它也不会重定向到上述错误页面。
所以我正在寻找的是一种最佳实践方法,可以用一个相当完整的代码示例来解决这个问题。
我的家庭控制器几乎总是重定向到另一个页面(在 javascript 中而不是控制器中)。我总共有大约 4 个控制器,总共有大约 6 个动作。
我的理想是在基本控制器中完全解决这个问题。如果不是这样,那么无论输入什么有效 URL,我都希望它能够正常工作(换句话说,即使 Web 应用程序不是通过 Home / Index 输入的)。如果不是这样,那么至少我希望我在代码中显示的内容能够正常工作(在 Home / Index 中设置 cookie 并在其他控制器 / 操作中检查它)并且即使重定向发生在控制器中也能工作。