【发布时间】:2019-01-29 13:11:12
【问题描述】:
从我的 ASP.NET Core 应用程序中,我想使用一个由某种令牌身份验证保护的 API。 由于获取令牌的过程需要很长时间(而且我认为不必要地多次这样做是不好的设计)我想确保如果没有令牌或者它是过期了。
这是我的方法: 我创建了一个新服务并将其注册为单例
services.AddSingleton<IService, Service>();
服务本身是这样的
public class Service : IService
{
private object _lock = new object();
private JwtSecurityToken _accessToken;
public Service()
{
GetNewToken();
}
public async Task<object> GetSomething()
{
EnsureAccessTokenValidity();
//Do the api call with the token
}
public async Task<object> GetSomethingDifferent()
{
EnsureAccessTokenValidity();
//Do the api call with the token
}
private void EnsureAccessTokenValidity()
{
if (_accessToken.ValidTo > DateTime.UtcNow) return;
lock (_lock)
{
if (_accessToken.ValidTo > DateTime.UtcNow) return;
GetNewToken();
}
}
private void GetNewToken()
{
//Get a new _accessToken
}
}
这似乎可行,但我认为应该有一种更优雅的方式来管理它。各位大佬是怎么处理这个问题的?
【问题讨论】:
标签: c# api .net-core locking jwt