C# ASP MVC模型或存储库中的Owin上下文
我正在尝试使用没有身份的Owin。在我的登录过程中,我添加了如下声明:C# ASP MVC模型或存储库中的Owin上下文,c#,asp.net-mvc,asp.net-mvc-4,owin,katana,C#,Asp.net Mvc,Asp.net Mvc 4,Owin,Katana,我正在尝试使用没有身份的Owin。在我的登录过程中,我添加了如下声明: [HttpPost] [AllowAnonymous] public ActionResult Login(Domain.Model.User.User model, string returnUrl) { var response = someFunctionCall(); AuthData data = response.authdata; IEnumerable<C
[HttpPost]
[AllowAnonymous]
public ActionResult Login(Domain.Model.User.User model, string returnUrl)
{
var response = someFunctionCall();
AuthData data = response.authdata;
IEnumerable<Claim> claim = new List<Claim>(){
new Claim(ClaimTypes.CookiePath, MvcApplication.ApplicationPath),
new Claim(ClaimTypes.Name, model.UserId),
new Claim(Constants.ClaimsConstants.1customClaim, data.1customClaim),
new Claim(Constants.ClaimsConstants.2customClaim, data.2customClaim)
};
ClaimsIdentity id = new ClaimsIdentity(claim, CookieAuthenticationDefaults.AuthenticationType);
HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties() { IsPersistent = true }, id);
return RedirectToAction("Index", "Home");
}
稍后在应用程序中,我需要访问索赔,但我似乎无法做到这一点
private static readonly ClaimsPrincipal user = Thread.CurrentPrincipal as ClaimsPrincipal;
private static readonly IEnumerable<Claim> claims = user.Claims;
public static CustomUserInfo Idenitiy
{
get
{
UserInfo user = new UserInfo()
{
Custom1 = claims.Where(c => c.Type == Constants.ClaimsConstants.1customClaim).First().Value,
Custom2 = claims.Where(c => c.Type == Constants.ClaimsConstants.2customClaim).First().Value
};
return user;
}
}
private static readonly ClaimsPrincipal user=Thread.CurrentPrincipal as ClaimsPrincipal;
私有静态只读IEnumerable声明=user.claims;
公共静态CustomUserInfo标识
{
得到
{
UserInfo user=newuserinfo()
{
Custom1=claims.Where(c=>c.Type==Constants.ClaimsConstants.1customClaim.First().Value,
Custom2=claims.Where(c=>c.Type==Constants.ClaimsConstants.2customClaim.First().Value
};
返回用户;
}
}
不确定是应该在上下文中使用Owin,还是可以使用Thread.current上下文。当我检查Thread.CurrentPrincipal时,它似乎不在索赔中。有什么想法吗 这是一个解决方法,但为了解决这个问题,我使用了owin上下文,而不是使用Thread.CurrentPrincipal。像这样:
private static readonly ClaimsPrincipal user = System.Web.HttpContext.Current.GetOwinContext().Authentication.User as ClaimsPrincipal;
private static readonly IEnumerable<Claim> claims = user.Claims;
public static CustomUserInfo Idenitiy
{
get
{
UserInfo user = new UserInfo()
{
Custom1 = claims.Where(c => c.Type == Constants.ClaimsConstants.1customClaim).First().Value,
Custom2 = claims.Where(c => c.Type == Constants.ClaimsConstants.2customClaim).First().Value
};
return user;
}
}
private static readonly ClaimsPrincipal user=System.Web.HttpContext.Current.GetOwinContext().Authentication.user作为ClaimsPrincipal;
私有静态只读IEnumerable声明=user.claims;
公共静态CustomUserInfo标识
{
得到
{
UserInfo user=newuserinfo()
{
Custom1=claims.Where(c=>c.Type==Constants.ClaimsConstants.1customClaim.First().Value,
Custom2=claims.Where(c=>c.Type==Constants.ClaimsConstants.2customClaim.First().Value
};
返回用户;
}
}
仍然不确定Thread.CurrentPrincipal为什么不工作
private static readonly ClaimsPrincipal user = System.Web.HttpContext.Current.GetOwinContext().Authentication.User as ClaimsPrincipal;
private static readonly IEnumerable<Claim> claims = user.Claims;
public static CustomUserInfo Idenitiy
{
get
{
UserInfo user = new UserInfo()
{
Custom1 = claims.Where(c => c.Type == Constants.ClaimsConstants.1customClaim).First().Value,
Custom2 = claims.Where(c => c.Type == Constants.ClaimsConstants.2customClaim).First().Value
};
return user;
}
}