为什么这个Linq方法抛出Null引用异常



我有一个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();行上抛出的,我不知道为什么。如果我检查代码行中的各种对象,它们就不会为空。如果我再次在代码行上执行调试器,它将毫无问题地运行。

为什么这行代码会间歇性地抛出错误"对象引用没有发送到对象的实例"?

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;
}
}

如评论中所述,为了方便搜索其他有类似问题的人:
"New up";dbContext直接在using时钟中的BaseApiController中,或者使用using语句(using var ctx = new Entities(string secret)(-这就可以了。

另一种选择是通过替换来强制Repository始终返回dbContext的新实例

public static Entities DB = new Entities(ConfigurationManager.AppSettings["ConnectionString"].ToString());

具有属性

public static Entities DB => new Entities(ConfigurationManager.AppSettings["ConnectionString"].ToString());

它应该解决可能的作用域问题,如果实际解决自定义dbContext类没有问题,就可以完成此操作。

相关内容

  • 没有找到相关文章

最新更新