我有一個BaseApiController我的控制器繼承的。它覆寫了該Initialize方法。該方法將從中檢索 JWT 令牌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;
}
}
在線拋出例外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;
}
}
uj5u.com熱心網友回復:
如評論中所述,為了便于搜索其他具有類似問題的人:直接在 BaseApiController 中的時鐘或陳述句 ( ) 中
“新建” - 這將dbContext起作用。usingusingusing 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類沒有問題,它應該解決可能的范圍問題并執行此操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/369959.html
標籤:asp.net-mvc 实体框架 林克 空引用异常
