我有一个使用表单身份验证的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特定的文件。
添加表单身份验证时会出现问题。
当我第一次访问该网站时,由于我未经过身份验证,因此我被重定向到“登录”页面(正如预期的那样)。该网址显示为http://localhost:63087/Account/Login?ReturnUrl=%2f
。登录后,我将重定向回根目录并进入正确的显示模式。一切都很好。
但是,URL不会更改。它保持为http://localhost:63087/Account/Login?ReturnUrl=%2f
。这是个问题。现在任何未来的导航都会混淆并将我发送回登录页面(即使我已经登录并经过身份验证)。
如何解决这个问题?
如何使用多种显示模式的ASP.NET MVC 4应用程序与表单身份验证一起正常工作?
感谢。