我有以下情况:
- 我有一个 ASP.NET MVC 网站/webapp,其中几乎所有控制器都受保护
[AuthorizeAttribute]
- 我引入了新页面(一个新控制器 + 一些操作),可供登录用户和匿名用户使用(我称它们为“公共”网址)。对于匿名用户,我们也使用 Session 来存储关键数据(例如,通过一些 ID 识别匿名用户等)。无论当前用户是否经过身份验证(登录)
LayoutView
,这些“公共”操作的设置都会被设置。如果他们通过了身份验证,那么整个childView
(由“公共”操作显示)被嵌入到一个主布局页面中,该页面为登录用户显示菜单等。匿名用户没有菜单,只有纯childview
页面。
我的问题:
- 如果登录用户超时,并尝试访问上述公共-url,则该页面会将他作为未登录用户(因此作为匿名用户)处理,因此在她访问新 url 之前,她会看到已登录的-in 界面,点击后会出现一个匿名界面,可能会吓到她!我无法将她重定向到 /Account/Logon/RedirectUrI=whatever,因为她访问的 url 对未登录的用户也有效。
我能想到的唯一解决方案是引入另一个控制器/动作,它们调用与当前相同的 BLL 逻辑,但具有[AuthorizedAttribute]
它们。但我想避免这种情况,因为:
- 这有点重复代码
- 对于登录用户和匿名用户,公共页面的 url 会有所不同,我想保持它们相同,因此登录用户可以将 url 复制粘贴到他们喜欢的任何地方,以传播word,并且该 url 仍然能够处理匿名用户。