我有一个静态类,其中包含几个静态方法。在这些方法中,我试图使用HttpContext.Current
访问当前线程的上下文。例如:
var userName = HttpContext.Current.User.Identity.Name;
然而,当我这样做时,我收到了一个NullReferenceException
,也就是臭名昭著的“对象引用未设置为对象的实例”错误。
有什么想法吗?
我有一个静态类,其中包含几个静态方法。在这些方法中,我试图使用HttpContext.Current
访问当前线程的上下文。例如:
var userName = HttpContext.Current.User.Identity.Name;
然而,当我这样做时,我收到了一个NullReferenceException
,也就是臭名昭著的“对象引用未设置为对象的实例”错误。
有什么想法吗?
static string GetCurrentUserName()
{
HttpContext context = HttpContext.Current;
if (context == null)
return null;
IPrincipal user = context.User;
if (user == null)
return null;
return user.Identity.Name;
}
public class UserResolver
{
private HttpContext context;
public UserResolver(HttpContext context)
{
if (context == null)
throw new ArgumentNullException("context");
this.context = context;
}
public string GetUserName()
{
return (context.User != null) ? context.User.Identity.Name : null;
}
}
HttpContext.Current
的地方,因为你无法从其他地方获取它。NullReferenceException
的堆栈跟踪来找出链路开始的地方和时间,所以你不必进行上述更改 - 我只是推荐一个通用方法,以帮助减少这类“缺失单例”错误。我遇到过这种情况,尤其是在另一个库中使用静态方法而不是我的主项目。当没有其他方法可行时,我会将HttpContext作为参数传递给静态方法。
空引用异常具体是在哪里抛出的?您是否进行了调试并查看了哪个对象为空?HttpContext.Current是空还是User是空?