首页 > 解决方案 > 从 mvc3 升级的 ASP.net mvc5 丢失 HTTPContext.User

问题描述

我正在将我从 MVC3 继承的旧版应用程序升级到 MVC5 并以某种方式破坏了 HTTPContext.User 对象。

该应用程序有一个自定义身份验证机制,该机制似乎可以正常工作,因为它将正确的用户对象返回到管道的其余部分。具体来说,在 Global.asax.cs 中:

protected void Application_BeginRequest(object sender, EventArgs args)
    {

        if (HttpContext.Current.User != null)
        {
            if (HttpContext.Current.User.GetType().FullName.Equals("Citation.AMS.Users.UserContext", StringComparison.OrdinalIgnoreCase))
            {
                try
                {
                    using (IAuditor auditor = CoreFactory.AuditorCreate())
                    {
                        auditor.WriteAudit(HttpContext.Current, "Compliance");
                    }
                }
                catch (Exception ex)
                {
                    using (ILogger log = CoreFactory.LoggerCreate())
                    {
                        log.WriteFatalError("Exception in Application_BeginRequest::Audit.", ex);
                    }
                }

HTTPContext.Current.User 的检查返回上面的正确对象。但是通过下一个方法调用:

protected void Application_AcquireRequestState(object sender, EventArgs args)
    {
        CultureInfo ci = null;
        HttpCookie cookie = Request.Cookies[CookieHelper.CookieName];
        if (cookie != null && !string.IsNullOrWhiteSpace(cookie.Values[CookieHelper.CultureName]))
        {
            ci = new CultureInfo(cookie.Values[CookieHelper.CultureName]);
        }
        else
        {

然后将该对象转换为 RolePrincipal 而不是正确的 User 类型。

在管道中的这两个方法调用之间必须进行一些处理,但我无法弄清楚它们之间发生了什么会改变用户对象。

在原始代码库中,这不会发生。我还基于 MVC3 分支创建了一个新分支,并升级了所有 nuget 包并更新了 web.config 文件,因为我发现了问题并且似乎效果更好(不想走那条路,因为我的另一个分支有许多其他更改将难以复制。)

有人可以告诉我我缺少什么或如何找出对象在这些方法调用之间发生变化的原因吗?

标签: asp.net-mvc

解决方案


找到它,它是重定向我的控制器的自定义 javascript。


推荐阅读