asp.net-mvc - 从 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 文件,因为我发现了问题并且似乎效果更好(不想走那条路,因为我的另一个分支有许多其他更改将难以复制。)
有人可以告诉我我缺少什么或如何找出对象在这些方法调用之间发生变化的原因吗?
解决方案
找到它,它是重定向我的控制器的自定义 javascript。
推荐阅读
- java - 如何在创建按需单例对象时处理空指针异常
- css - 强制浏览器将元素显示为文本
- node.js - 我的构建没有正确转换源
- ruby - 如何使用 ruby 循环 xml 节点
- batch-file - 我的 TF.exe 奇怪地消失了 0KB 并且无法运行
- reactjs - 显示预期分配或功能调用错误的代码
- node.js - 根据 id 和 Objectid 更新特定对象的数组
- reactjs - 反应状态正在更新而不调用 setState
- typescript - angular2-multiselect-dropdown onAddFilterNewItem 不起作用
- python - 如何阻止特定单元格在 google colab 中运行?