提问人:mitchsnitchel 提问时间:11/28/2021 最后编辑:mitchsnitchel 更新时间:11/30/2021 访问量:173
为什么此 Linq 方法会引发 Null 引用异常
Why does this Linq method throw a Null Reference Exception
问:
我有一个我的控制器继承自。它重写该方法。该方法将从 中检索 JWT 令牌,并使用它来检索发出请求的用户。BaseApiController
Initialize
HttpControllerContext
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;
}
}
异常被抛在了线上,我不知道为什么。如果我检查代码行中的各种对象,它们不是 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;
}
}
答:
0赞
quain
11/30/2021
#1
如评论中所述,为了便于搜索具有类似问题的其他人:
直接在 BaseApiController 中的时钟或使用语句 () 进行“新建” - 这将解决问题。dbContext
using
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
评论
DB
是和/或未期待的异步?lazy
dbContext
Configuration.LazyLoadingEnabled = false
DbContext
using