我有一个使用表单身份验证的 ASP.NET MVC 4 应用程序(我从 ASP.NET MVC 4 移动模板开始)。我还添加了显示模式功能以支持移动设备。但是,表单身份验证似乎不适用于这些不同的显示模式。
在 Global.asax Application_Start 中,我有
DisplayModeProvider.Instance.Modes.Insert(1, new DefaultDisplayMode("iPhone")
{
ContextCondition = (context => context.GetOverriddenUserAgent().IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) >= 0)
});
注册 iPhone 的显示模式。
在 ~/Views/Shared 中,我有用于桌面浏览器的 _Layout.cshtml 和用于 iPhone 的 _Layout.iPhone.cshtml。在 ~/Views/Home 中,我有用于桌面浏览器的 Index.cshtml 和用于 iPhone 的 Index.iPhone.cshtml。在 ~/Views/Account 中,我有 ASP.NET MVC 4 移动 Web 模板(索引、登录、注册等)附带的标准 .cshtml 文件。
在 FilterConfig.cs RegisterGlobalFilters 中,我添加了 filters.Add(new System.Web.Mvc.AuthorizeAttribute()); 以便在站点中的任何位置导航都需要身份验证(AccountController 除外,它在 Login 和 Register 操作方法上有 [AllowAnonymous])。
这是所有基本的东西,并且设置正确。在浏览器中导航到站点时(从桌面浏览器和 iPhone 浏览器),显示模式设置/配置效果很好,我被带到普通的 .cshtml 文件或 iPhone 特定的文件。
添加表单身份验证时会出现问题。
当我第一次访问该站点时,由于我没有通过身份验证,我被重定向到登录页面(如预期的那样)。URL 显示为http://localhost:63087/Account/Login?ReturnUrl=%2f
。登录后,我被重定向回根目录并进入正确的显示模式。一切都好。
但是,URL 不会改变。它保持为http://localhost:63087/Account/Login?ReturnUrl=%2f
. 这是个问题。现在任何未来的导航都会变得混乱并将我送回登录页面(即使我已经登录并通过了身份验证)。
如何解决这个问题?
如何使具有多种显示模式的 ASP.NET MVC 4 应用程序与表单身份验证一起正常工作?
谢谢。