【发布时间】:2022-01-05 11:57:09
【问题描述】:
我有一个BaseApiController,我的控制器继承自该BaseApiController。它覆盖了Initialize 方法。该方法将从HttpControllerContext 中检索 JWT 令牌,并使用它来检索发出请求的用户。
public class BaseApiController : ApiController
{
public static tUser CurrentUser;
public BaseApiController()
{
}
protected override void Initialize(HttpControllerContext controllerContext)
{
base.Initialize(controllerContext);
var request = controllerContext.Request;
if (request.Headers.Authorization != null && request.Headers.Authorization.Scheme.Equals("bearer", StringComparison.OrdinalIgnoreCase))
{
CurrentUser = Helpers.JwtAuthentication.UserToken(request.Headers.Authorization.Parameter);
}
}
}
在调用UserToken 方法时会间歇性地发生错误。方法如下。
public static tUser UserToken(string token)
{
string username = ExtractUserName(token);
if (string.IsNullOrEmpty(username))
return null;
try
{
tUser user = Repository.DB.tUsers.Where(u => u.UserName == username && u.IsDeleted == false).FirstOrDefault();
return user;
}
catch (Exception ex)
{
return null;
}
}
在tUser user = Repository.DB.tUsers.Where(u => u.UserName == username && u.IsDeleted == false).FirstOrDefault(); 行上抛出了异常,我不知道为什么。如果我检查代码行中的各种对象,它们不为空。如果我再次在代码行上执行调试器,它就可以正常运行。
为什么这行代码会间歇性抛出错误'Object reference is not sent to an instance of an object'?
public class Repository
{
public static Entities DB = new Entities(ConfigurationManager.AppSettings["ConnectionString"].ToString());
}
public partial class Entities : DbContext
{
public Entities(string secret) : base(Helpers.KeyVault.GetSecret(secret))
{
this.Configuration.LazyLoadingEnabled = false;
}
}
【问题讨论】:
-
DB是lazy和/或未等待的异步dbContext? -
我已经设置了
Configuration.LazyLoadingEnabled = false,但仍然抛出错误。看起来数据库上下文没有被异步使用。我已经添加了上面的代码 -
您查询的
DbContext的生命周期是多少? -
尝试直接在 UserTokens 中新建 dbContext - 也可以在
using块中尝试。 -
将代码放在 using 语句中似乎就足够了。错误今天没有返回。如果你想回答这个问题,我会接受。感谢您的帮助
标签: asp.net-mvc entity-framework linq nullreferenceexception