这是情景:
我有一个登录页面,用户登录后会被重定向到主页应用程序页面。然后用户使用浏览器的返回按钮,现在他回到了登录页面。他尝试再次登录,但现在抛出了一个异常:
HttpAntiForgeryException (0x80004005):提供的防伪标记是给用户“”,但当前用户是“userName”。
我知道这与缓存有关。我使用自定义NoCache过滤器禁用了登录操作的浏览器缓存,并设置了所有必需的头信息- no-cache,no-store,must-revalidate等。但是
- 这在所有浏览器上都不起作用
- 特别是Safari(大多数情况下是移动设备)完全忽略此类设置
我将尝试进行hack并强制safari移动设备刷新,但这不是我期望的。
我想知道是否可以:
- 处理异常而不向用户显示任何问题(对用户完全透明)
- 通过替换防伪令牌用户名来预防此问题,这将允许用户再次登录而不会出现此异常,如果我的与浏览器缓存相关的hack在下一个版本的浏览器中停止工作。
- 我真的不想依赖浏览器行为,因为每个浏览器的行为都不同。
更新1
为了澄清一些问题,我知道如何在MVC中处理错误。问题是这种错误处理根本没有解决我的问题。错误处理的基本思想是重定向到带有良好消息的自定义错误页面。但我想要预防这种错误发生,而不是以用户可见的方式处理它。通过处理,我指捕获用户名并替换或采取其他适当的操作,然后继续登录。
更新2
我已添加以下解决方案,对我有用。