Это основной проект asp.net.
вот мой код.
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(...);
services.AddHttpContextAccessor();
services.TryAddSingleton<IUserInfo,UserInfo>();
Первый код:
public class UserInfo : IUserInfo
{
private readonly IHttpContextAccessor _httpContextAccessor;
public UserInfo(IHttpContextAccessor iHttpContextAccessor)
{
_httpContextAccessor = iHttpContextAccessor;
}
public UserData GetUserData()
{
if (_httpContextAccessor.HttpContext.User.Identity.IsAuthenticated)
{
// do something
}
}
}
Второй код:
public class UserInfo : IUserInfo
{
private readonly HttpContext _httpContext;
public UserInfo(IHttpContextAccessor iHttpContextAccessor)
{
_httpContext= iHttpContextAccessor.HttpContext;
}
public UserData GetUserData()
{
if (_httpContext.User.Identity.IsAuthenticated)
{
// do something
}
}
}
Когда я использую первый код в Action
, это нормально. HttpContext.Request.Headers["Authorization"]
имеет мой токен, а IsAuthenticated
- это правда.
Но когда я использую второй код, он не может работать. HttpContext
не правильно. HttpContext.Request.Headers["Authorization"]
пусто, а IsAuthenticated
ложно.
Я хочу знать, поэтому, спасибо.
Если вы не понимаете моих слов, извините за это, мой английский очень плохой ...