为什么这个 Linq 方法会抛出 Null Reference Exception
Why does this Linq method throw a Null Reference Exception
我的控制器继承自 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;
}
}
如评论中所述,为了便于搜索其他有类似问题的人:
“新建”dbContext
直接在 using
时钟中的 BaseApiController 中或使用 using
语句 (using var ctx = new Entities(string secret)
) - 这会成功。
替代方法是通过替换
强制Repository
总是returndbContext
的新实例
public static Entities DB = new Entities(ConfigurationManager.AppSettings["ConnectionString"].ToString());
属性
public static Entities DB => new Entities(ConfigurationManager.AppSettings["ConnectionString"].ToString());
它应该解决可能的范围问题,如果实际解析自定义没有问题,就可以解决问题 dbContext
class.
我的控制器继承自 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;
}
}
如评论中所述,为了便于搜索其他有类似问题的人:
“新建”dbContext
直接在 using
时钟中的 BaseApiController 中或使用 using
语句 (using var ctx = new Entities(string secret)
) - 这会成功。
替代方法是通过替换
强制Repository
总是returndbContext
的新实例
public static Entities DB = new Entities(ConfigurationManager.AppSettings["ConnectionString"].ToString());
属性
public static Entities DB => new Entities(ConfigurationManager.AppSettings["ConnectionString"].ToString());
它应该解决可能的范围问题,如果实际解析自定义没有问题,就可以解决问题 dbContext
class.