2017-08-14 56 views
0

背景标识是在数据库

我正在一个.net核心API项目带动一个社区驱动的歌词网站从编号不同。所以用户可以提交歌词&歌词。每位艺术家都有很多歌词(经典的一对多)。

对于身份验证&授权,我正在使用JWT令牌。

CODE

在我的歌词控制器,我对创造一个抒情的[HttpPost]方法。下面的代码:一点不

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, DatabaseDataSeeder databaseDataSeeder) 
{ 
    loggerFactory.AddConsole(); 

    app.UseJwtBearerAuthentication(new JwtBearerOptions 
    { 
    AutomaticAuthenticate = true, 
    AutomaticChallenge = true, 
    TokenValidationParameters = new TokenValidationParameters 
    { 
     ValidIssuer = _config["Tokens:Issuer"], 
     ValidAudience = _config["Tokens:Audience"], 
     ValidateIssuerSigningKey = true, 
     IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Tokens:Key"])), 
     ValidateLifetime = true 
    } 
    }); 
    app.UseMvc(); 
    databaseDataSeeder.Seed().Wait(); 
} 

的问题

通过var user = _userManager.GetUserAsync(HttpContext.User);返回的用户有(int型的)一种ID:

[Authorize] 
[HttpPost("{artistSlug}/lyrics")] 
public async Task<IActionResult> CreateLyric(string artistSlug, [FromBody] LyricCreateDto newLyricCreateDto) 
{ 
    if (newLyricCreateDto == null) return BadRequest(); 
    if (!ModelState.IsValid) return BadRequest(ModelState); 
    var user = _userManager.GetUserAsync(HttpContext.User); 
    var lyricReadDto = await _lyricsService.AddNewLyric(user.Id.ToString(), artistSlug, newLyricCreateDto); 
    if (lyricReadDto == null) return NotFound(); 
    return CreatedAtRoute("GetLyric", new {artistSlug, lyricSlug = lyricReadDto.Slug}, lyricReadDto); 
} 

在我Startup.cs,我有以下匹配dbo.AspNetUsers表中用户的ID。此外,表dbo.AspNetUsers中的Id列的类型为Guid

我不知道这是怎么回事!下面是截图:

user in code

下面是在SQL Management Studio中对dbo.AspNetUsers查询:

user in database

这究竟是为什么?

回答

5

问题是,您正在查看异步方法的结果,换句话说,一个Task<>,其中Id属性与您的用户没有任何关系。您需要await方法调用:

var user = await _userManager.GetUserAsync(HttpContext.User); 
+1

不错,你打了我10秒。 – Igor

+0

傻我,谢谢@DavidG – Ciwan

5

你是不是等待任务的结果,所以你实际上并没有调试/看UserTask对象。添加await关键字。

var user = await _userManager.GetUserAsync(HttpContext.User); 
+1

往复:) – DavidG

+0

另外,正确:) – Ciwan

相关问题