1
我有一個的UserContext服務,我就會把一些基本的功能(」 IsAuthenticated
,GetUser
等)的HttpContext空的構造
爲了做到這一點,我需要從我的WebAPI控制器通過HTTPContext
我的類庫服務。
其實,HttpContext
總是null
在Web API控制器。
任何人有一個解決方案來解決我的問題? 有沒有更好的方式來acheive它。
的Web API用戶控制器
[Route("api/[controller]")]
[Authorize]
public class UserController : Controller
{
private readonly IUserContextServices _userContextServices;
private readonly User loggedUser;
public UserController()
{
//HttpContext ALWAYS NULL
_userContextServices = new UserContextService(HttpContext);
}
}
的UserContext服務
namespace MyProj.Services
{
public interface IUserContextServices
{
UserContext GetUserContext();
bool IsUserAuthenticated();
}
public class UserContextService : IUserContextServices
{
private readonly HttpContext _context;
private UserContext _userContext;
public UserContextService(HttpContext context)
{
_context = context;
InitUserContext();
}
private IEnumerable<Claim> GetUserClaims()
{
if (IsUserAuthenticated())
{
return _context.User.Claims;
}
return null;
}
private void InitUserContext()
{
if (IsUserAuthenticated())
{
var claims = GetUserClaims();
_userContext = new UserContext();
_userContext.Email = claims.First(p => p.Type == "email").Value;
_userContext.AspNetUserID = claims.First(p => p.Type == "sub").Value;
}
}
public UserContext GetUserContext()
{
return _userContext;
}
public bool IsUserAuthenticated()
{
return _context.User != null && _context.User.Identity != null && _context.User.Identity.IsAuthenticated;
}
}
}
在調用控制器的流程中,在創建控制器時HttpContext未準備好/分配。重新考慮設計,以便在相關類的生命週期中稍後使用注入的上下文 – Nkosi
在構造函數之後調用哪個方法? –