C# 用户身份用户名保存

C# 用户身份用户名保存,c#,api,owin-middleware,C#,Api,Owin Middleware,我想救你 HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(new GenericIdentity(user.UserName), new string[] { /* fill roles if any */ }); string f = HttpContext.Current.User.Identity.Name; //在这里,它在login方法中成功显示用户名

我想救你

 HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(new GenericIdentity(user.UserName), new string[] { /* fill roles if any */ });
                string f = HttpContext.Current.User.Identity.Name;
//在这里,它在login方法中成功显示用户名,但当我稍后尝试在另一个方法中获取user.identity.name时,它返回null值,我将发布我使用owin identity的登录方法 登录后,它总是没有经过身份验证或授权

    public async Task<IHttpActionResult> Login(LoginViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest();
        }

        try
        {
            var result = await SignInManager.PasswordSignInAsync(model.username, model.Password, isPersistent: true, shouldLockout: false);
            var user = await UserManager.FindByNameAsync(model.username);
            AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
            AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = true },
              await user.GenerateUserIdentityAsync(UserManager));
         
            if (result == SignInStatus.Success && user != null)
            {
                int temp_loginTimes = user.login_times;
                temp_loginTimes++;
                user.login_times = temp_loginTimes;
                user.last_login = Convert.ToDateTime(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture));
                user.ip = model.ip;
                user.device_type = model.device_type;
                var res = await UserManager.UpdateAsync(user);
                HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(new GenericIdentity(user.UserName), new string[] { /* fill roles if any */ });
              

                string f = HttpContext.Current.User.Identity.Name;
                FormsAuthentication.SetAuthCookie(model.username, true);
                if (res.Succeeded == true)
                {
                    LoginHistoryBLL loginHistory = new LoginHistoryBLL();
                    var rese = loginHistory.SaveLogInDetails(new LoginHistoryDTO() { username = user.UserName, logindate = (DateTime)user.last_login, creater = user.creater, type = user.type, device = model.device_type, ip = model.ip });
UserDTO userDTO = new UserDTO();
                    if (rese.ok == true) {
                        userDTO.username = user.UserName;
                        userDTO.creater = user.creater;
                        userDTO.login_times = user.login_times;
                        userDTO .balance = user.balance;
                        userDTO.password= user.PasswordHash;
                        userDTO.type = user.type;
                        userDTO.bonus = user.bonus;
                        userDTO.balance_in = user.balance_in;
                        userDTO.balance_out = user.balance_out;
                        userDTO.device_type = user.device_type;
                        userDTO.status = user.status;
                        userDTO.percantageOfLuck = user.percantageOfLuck;
                        userDTO.double_bunos_active = user.double_bunos_active;
                        userDTO.level = user.level;



 string gf = User.Identity.Name; //until here work everything fine
                        return Ok(userDTO);
                    }
                    else
                        return BadRequest("user not saved in history");

                }
                else
                {
                    return BadRequest("user not updated");
                }
            }
            else
            {
                return BadRequest("user not assign");
            }


        }
        catch (Exception ex)
        {
            return BadRequest(ex.Message);

        }

    }
公共异步任务登录(LoginViewModel模型)
{
如果(!ModelState.IsValid)
{
返回请求();
}
尝试
{
var result=await-SignInManager.PasswordSignInAsync(model.username,model.Password,ispersist:true,shouldllockout:false);
var user=await UserManager.FindByNameAsync(model.username);
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
AuthenticationManager.SignIn(新的AuthenticationProperties(){IsPersistent=true},
等待user.GenerateUserIdentityAsync(UserManager));
if(result==SignInStatus.Success&&user!=null)
{
int temp_loginTimes=user.login_次;
temp_loginTimes++;
user.login\u times=临时登录时间;
user.last_login=Convert.ToDateTime(DateTime.Now.ToString(“yyyy/MM/dd HH:MM:ss”,CultureInfo.InvariantCulture));
user.ip=model.ip;
user.device\u type=model.device\u type;
var res=await UserManager.UpdateAsync(用户);
HttpContext.Current.User=new System.Security.Principal.GenericPrincipal(新的GenericEntity(User.UserName),新字符串[]{/*如果有,请填写角色*/});
字符串f=HttpContext.Current.User.Identity.Name;
FormsAuthentication.SetAuthCookie(model.username,true);
如果(res.successed==true)
{
LoginHistoryBLL loginHistory=新的LoginHistoryBLL();
var rese=loginHistory.SaveLogInDetails(新的LoginHistoryTo(){username=user.username,logindate=(DateTime)user.last\u login,creater=user.creater,type=user.type,device=model.device\u type,ip=model.ip});
UserDTO UserDTO=新UserDTO();
如果(rese.ok==true){
userDTO.username=user.username;
userDTO.creater=user.creater;
userDTO.login\u次=user.login\u次;
userDTO.balance=user.balance;
userDTO.password=user.PasswordHash;
userDTO.type=user.type;
userDTO.bonus=user.bonus;
userDTO.balance_in=user.balance_in;
userDTO.balance\u out=user.balance\u out;
userDTO.device_type=user.device_type;
userDTO.status=user.status;
userDTO.percantigeofluck=user.percantigeofluck;
userDTO.double\u bunos\u active=user.double\u bunos\u active;
userDTO.level=user.level;
字符串gf=User.Identity.Name;//直到这里一切正常
返回Ok(userDTO);
}
其他的
返回BadRequest(“未保存在历史记录中的用户”);
}
其他的
{
返回请求(“用户未更新”);
}
}
其他的
{
返回请求(“用户未分配”);
}
}
捕获(例外情况除外)
{
返回请求(例如消息);
}
}
但是对于ex:用这种方法我什么也得不到

    // POST api/Account/getuserwithcreater
    [Route("getuserwithcreater")]
    [HttpGet]
    public async Task<IHttpActionResult> GetUsersAsync()
    {
        using (var context = new ApplicationDbContext())
        {
            ApplicationUser curuser = await UserManager.FindByIdAsync(User.Identity.GetUserId());
            List<UserDTO> us = new List<UserDTO>();
            
            foreach (var item in UserManager.Users)
            {
                if (item.creater == User.Identity.Name)
                {
                    UserDTO userDTO = new UserDTO(); ;
                    userDTO.username = item.UserName;
                    userDTO.creater = item.creater;
                    userDTO.login_times = item.login_times;
                    userDTO.balance = item.balance;
                    userDTO.password = item.PasswordHash;
                    userDTO.type = item.type;
                    userDTO.bonus = item.bonus;
                    userDTO.balance_in = item.balance_in;
                    userDTO.balance_out = item.balance_out;
                    userDTO.device_type = item.device_type;
                    userDTO.status = item.status;
                    userDTO.percantageOfLuck = item.percantageOfLuck;
                    userDTO.double_bunos_active = item.double_bunos_active;
                    userDTO.level = item.level;
                    us.Add(userDTO);
                }
            }


            return Ok(us);
        }
    }
//发布api/Account/getuserwithcreater
[路由(“getuserwithcreater”)]
[HttpGet]
公共异步任务GetUsersAsync()
{
使用(var context=new ApplicationDbContext())
{
ApplicationUser curuser=wait UserManager.FindByIdAsync(User.Identity.GetUserId());
List us=新列表();
foreach(UserManager.Users中的var项)
{
if(item.creater==User.Identity.Name)
{
UserDTO UserDTO=新的UserDTO();
userDTO.username=item.username;
userDTO.creater=item.creater;
userDTO.login_times=item.login_times;
userDTO.balance=item.balance;
userDTO.password=item.PasswordHash;
userDTO.type=item.type;
userDTO.bonus=item.bonus;
userDTO.balance\u in=item.balance\u in;
userDTO.balance\u out=item.balance\u out;
userDTO.device\u type=item.device\u type;
userDTO.status=item.status;
userDTO.percantigeofluck=item.percantigeofluck;
userDTO.double\u bunos\u active=item.double\u bunos\u active;
userDTO.level=item.level;
添加(userDTO);
}
}
返回Ok(美国);
}
}

看起来您有一个登录端点,您应该在owin管道中作为身份验证中间件本身进行身份验证,并使用
ClaimsIdentity
实际上我不熟悉身份验证,请您进一步解释一下