【问题标题】:HttpContext.Current NullReferenceException in asp.net MVCasp.net MVC 中的 HttpContext.Current NullReferenceException
【发布时间】:2012-05-29 18:37:56
【问题描述】:

我的应用程序中有 2 个 RAZOR 索引表。 1 Form 在一个数据库“LocalDB”中创建记录,并在另一个数据库“Core DB”中更新相同的记录。另一个表单将记录从“CoreDB”同步到“LocalDB”。必须这样做,因为还有其他应用程序在“CoreDB”中创建记录。 在我的本地数据库中,我将审计跟踪保留 4 列。 CreateAt、CreatedBy、ModifiedAt、ModifiedBy。这些列向我提供了有关谁创建/修改了记录以及时间的信息。

我有一个带有静态函数的简单静态类,我让当前用户以

身份登录到我的 Web 应用程序
currentUser = HttpContext.Current.User.Identity.Name;     

这在我使用创建记录的表格 1 时有效。 当我使用 Form 2 时,尝试将记录从 COREDB 同步到 LocalDB,同一行会引发空异常。

你能告诉我为什么会这样吗?

谢谢!

【问题讨论】:

  • 在查询Identity 对象之前,您真的应该检查HttpContext.Current.User.IsAuthenticated :)
  • HttpContext.User 没有 IsAuthenticated 方法,但 HttpContext.User.Identity.IsAuthenticated 确实存在,HttpContext 对象上没有 .Current
  • 如果将 System.Web 添加为头文件,则可以使用 HTTPContext.Current 获取当前登录的用户。这就是我一直在使用的方式。我不能使用 HTTPContext.User 因为 VS Intellicense 在我的静态类中没有该选项。这不在控制器中。这是我的头类之一。
  • 这太奇怪了!在我有using System.Web; 的任何课程中,我都没有得到HttpContext.Current,我的环境显然有问题:-)

标签: asp.net-mvc-3 httpcontext


【解决方案1】:

在查看HttpContext.Current.User.Identity.Name之前检查HttpContext.Current != null && HttpContext.Current.User.Identity != null && HttpContext.Current.User.Identity.IsAuthenticated

【讨论】:

  • 我试过了,但还是不行。 HttpContext currentContext = HttpContext.Current;字符串 currentUserName = currentContext.User.Identity.Name;不知道发生了什么。其他页面也一样。它只是不是这个页面。
  • 您是否在 Task.RunParallel.Each 或其他使您脱离请求线程的异步表达式中?
【解决方案2】:

您没有在您的问题中解释您在哪里以及如何调用包含此行的方法。您谈到了同步一些数据库。我非常怀疑您试图在后台线程中使用HttpContext.Current,这显然是不可能的,因为后台线程中没有任何 HttpContext 。

如果不是这种情况,请确保用户在访问其名称之前已通过身份验证:

string currentUser = "";
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
    currentUser = HttpContext.Current.User.Identity.Name;
}

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 2015-06-25
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    相关资源
    最近更新 更多