Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 为什么我';我在httpget的结果中得到一个空数组?_Asp.net Core_Postman - Fatal编程技术网

Asp.net core 为什么我';我在httpget的结果中得到一个空数组?

Asp.net core 为什么我';我在httpget的结果中得到一个空数组?,asp.net-core,postman,Asp.net Core,Postman,我有StatUserModel(代码如下) StatsUserModel.cs namespace WebAPI.Models { public class StatsUserModel { public int DeviceID { get; set; } public int bloodpress_sys { get; set; } public int bloodpress_dia { get; set; }

我有StatUserModel(代码如下) StatsUserModel.cs

namespace WebAPI.Models
{
    public class StatsUserModel
    {
        public int DeviceID { get; set; }
        public int bloodpress_sys { get; set; }
        public int bloodpress_dia { get; set; }
        public int saturation { get; set; }
        public int BPM { get; set; }
        public int veinsdiameter { get; set; }
        public string Id { get; set; }
    }
}
namespace WebAPI.Models
{
    public class AuthenticationContext : IdentityDbContext
    {
        public AuthenticationContext(DbContextOptions options):base(options)
        {

        }

        public DbSet<ApplicationUser> ApplicationUsers { get; set; }
        public DbSet<StatsUserModel> statsUserModels { get; set; }
    }
}
namespace WebAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class StatsController : ControllerBase
    {
        private UserManager<ApplicationUser> _userManager;

        private AuthenticationContext context;
        public StatsController(AuthenticationContext _context, UserManager<ApplicationUser> userManager)
        {
            context = _context;
            _userManager = userManager;
        }

        [HttpGet]
        [Authorize]
        public async Task<Object> GetStats(LoginModel model)
        {
            string userId = User.Claims.First(c => c.Type == "UserID").Value;
            var user = await _userManager.FindByIdAsync(userId);
            var data = context.statsUserModels.Where(s => s.Id == user.Id);
            return data;
        }
    }
}
我有来自AspNetUsers的用户

我有AuthenticationContext.cs

namespace WebAPI.Models
{
    public class StatsUserModel
    {
        public int DeviceID { get; set; }
        public int bloodpress_sys { get; set; }
        public int bloodpress_dia { get; set; }
        public int saturation { get; set; }
        public int BPM { get; set; }
        public int veinsdiameter { get; set; }
        public string Id { get; set; }
    }
}
namespace WebAPI.Models
{
    public class AuthenticationContext : IdentityDbContext
    {
        public AuthenticationContext(DbContextOptions options):base(options)
        {

        }

        public DbSet<ApplicationUser> ApplicationUsers { get; set; }
        public DbSet<StatsUserModel> statsUserModels { get; set; }
    }
}
namespace WebAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class StatsController : ControllerBase
    {
        private UserManager<ApplicationUser> _userManager;

        private AuthenticationContext context;
        public StatsController(AuthenticationContext _context, UserManager<ApplicationUser> userManager)
        {
            context = _context;
            _userManager = userManager;
        }

        [HttpGet]
        [Authorize]
        public async Task<Object> GetStats(LoginModel model)
        {
            string userId = User.Claims.First(c => c.Type == "UserID").Value;
            var user = await _userManager.FindByIdAsync(userId);
            var data = context.statsUserModels.Where(s => s.Id == user.Id);
            return data;
        }
    }
}
名称空间WebAPI.Models
{
公共类AuthenticationContext:IdentityDbContext
{
公共AuthenticationContext(DbContextOptions):基本(选项)
{
}
公共数据库集应用程序用户{get;set;}
公共数据库集StatUserModels{get;set;}
}
}
因此,我创建了statcontroller和HttpGet方法 statcontroller.cs

namespace WebAPI.Models
{
    public class StatsUserModel
    {
        public int DeviceID { get; set; }
        public int bloodpress_sys { get; set; }
        public int bloodpress_dia { get; set; }
        public int saturation { get; set; }
        public int BPM { get; set; }
        public int veinsdiameter { get; set; }
        public string Id { get; set; }
    }
}
namespace WebAPI.Models
{
    public class AuthenticationContext : IdentityDbContext
    {
        public AuthenticationContext(DbContextOptions options):base(options)
        {

        }

        public DbSet<ApplicationUser> ApplicationUsers { get; set; }
        public DbSet<StatsUserModel> statsUserModels { get; set; }
    }
}
namespace WebAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class StatsController : ControllerBase
    {
        private UserManager<ApplicationUser> _userManager;

        private AuthenticationContext context;
        public StatsController(AuthenticationContext _context, UserManager<ApplicationUser> userManager)
        {
            context = _context;
            _userManager = userManager;
        }

        [HttpGet]
        [Authorize]
        public async Task<Object> GetStats(LoginModel model)
        {
            string userId = User.Claims.First(c => c.Type == "UserID").Value;
            var user = await _userManager.FindByIdAsync(userId);
            var data = context.statsUserModels.Where(s => s.Id == user.Id);
            return data;
        }
    }
}
名称空间WebAPI.Controllers
{
[路由(“api/[控制器]”)]
[ApiController]
公共类StatsController:控制器数据库
{
私人用户管理器(UserManager);;
私有身份验证上下文;
公共StatsController(AuthenticationContext\u context,UserManager UserManager)
{
上下文=_上下文;
_userManager=userManager;
}
[HttpGet]
[授权]
公共异步任务GetStats(LoginModel模型)
{
字符串userId=User.Claims.First(c=>c.Type==“userId”).Value;
var user=await\u userManager.FindByIdAsync(userId);
var data=context.statUserModels.Where(s=>s.Id==user.Id);
返回数据;
}
}
}
生成JWT

[HttpPost]
        [Route("Login")]
        public async Task<IActionResult> Login(LoginModel loginModel)
        {
            var user = await _userManager.FindByNameAsync(loginModel.UserName);
            if(user != null && await _userManager.CheckPasswordAsync(user, loginModel.Password))
            {
                var tokenDescriptor = new SecurityTokenDescriptor
                {
                    Subject = new ClaimsIdentity(new Claim[] 
                    {
                        new Claim("UserID", user.Id.ToString())
                    }),
                    Expires = DateTime.Now.AddDays(1),
                    SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_applicationSettings.JWT_Secret)), SecurityAlgorithms.HmacSha256Signature)
                };
                var tokenHandler = new JwtSecurityTokenHandler();
                var securityToken = tokenHandler.CreateToken(tokenDescriptor);
                var token = tokenHandler.WriteToken(securityToken);
                return Ok(new { token });
            }
            else
            {
                return BadRequest(new { message = "Username or password invalid" });
            }

        }
[HttpPost]
[路线(“登录”)]
公共异步任务登录(LoginModel LoginModel)
{
var user=await\u userManager.FindByNameAsync(loginModel.UserName);
if(user!=null&&await\u userManager.CheckPasswordAsync(user,loginModel.Password))
{
var tokenDescriptor=新的SecurityTokenDescriptor
{
主题=新的索赔实体(新的索赔[]
{
新声明(“UserID”,user.Id.ToString())
}),
Expires=DateTime.Now.AddDays(1),
SigningCredentials=新的SigningCredentials(新的SymmetricSecurityKey(Encoding.UTF8.GetBytes(_applicationSettings.JWT_Secret)),SecurityAlgorithms.HmacSha256Signature)
};
var tokenHandler=new JwtSecurityTokenHandler();
var securityToken=tokenHandler.CreateToken(tokenDescriptor);
var token=tokenHandler.WriteToken(securityToken);
返回Ok(新的{token});
}
其他的
{
返回BadRequest(新的{message=“用户名或密码无效”});
}
}

我使用Postman来测试登录,它会返回一个JWT令牌,一切正常,但当我传递登录名和密码时,它会返回一个带有200OK代码的空数组,修复了,我已经进行了添加迁移,再次填充了表,一切正常,谢谢Rena

我建议您可以调试代码以检查
userId
是否包含值。以及您是否获得
userId
。如果您没有获得
userId
,请分享您是如何生成jwt令牌的。从输出中,我有:选择[s].[Id],[s].[BPM],[s].[DeviceID],[s].[s].[bloodpress\u-dia],[s].[bloodpress\u-sys]。[s].[s].[veinsdiameter]WebAPI>来自[StatusUserModels]AS[s]WebAPI>其中[s].[Id]=@.[u用户Id\u 0正在处理身份验证时,我得到以下信息:选择顶部(1)[u].[Id],[u].[AccessFailedCount],[u].[ConcurrencyStamp],[u].[Discriminator],[u].[E],[u],[u].[u].[EmailConfirmmed],[u].[u].[Lockouted],[u].[LockoutEnd],[u].[NormalizedEmail],[u].[NormalizedUserName],[u].[PasswordHash],[u].[PhoneNumber],[u].[PhoneNumberConfigured],[u].[SecurityStamp],[u].[TwoFactorEnabled],[u].[UserName],[u].[FullName]WebAPI>,来自[AspNetUsers]作为[u]您可能误解了我的意思。您需要调试vs中的代码,以检查哪一行不查询数据。有关如何调试代码:因此,我得到的是用户ID,但用户和数据为空