2016-09-17 5 views
3

Я googleing для получения пользователя приложения в контроллере в ASP.NET Identity 3.0, но я только нахожу результаты для 5 и ниже.Получить ApplicationUser в контроллере

Я пытаюсь получить свойства ApplicationUser, но я не могу получить ApplicationUser. Я думаю, это легко, потому что я единственный, у кого есть эта проблема.

using System.Linq; 
using System.Threading.Tasks; 
using Microsoft.AspNet.Mvc; 
using Microsoft.AspNet.Mvc.Rendering; 
using Microsoft.Data.Entity; 
using System; 
using System.Collections.Generic; 
using System.Reflection; 
using Microsoft.AspNet.Identity; 
using System.Security.Claims; 

namespace ApplicationUserFMLTest.Controllers 
{ 
    public class CustomClassController : Controller 
    { 
     private readonly UserManager<ApplicationUser> _userManager; 
     private readonly SignInManager<ApplicationUser> _signInManager; 

     private ApplicationDbContext _context; 

     public CandidatesController(ApplicationDbContext context, UserManager<ApplicationUser> userManager, SignInManager<ApplicationUser> signInManager) 
     { 
      _context = context; 
      _userManager = userManager; 
      _signInManager = signInManager; 
     } 

     // GET: CustomClass 
     public async Task<IActionResult> Index() 
     { 
      ApplicationUser currentUser = _userManager.FindByIdAsync(User.Identity.GetUserId()).Result; 


      if (currentUser.PropBool) 
       return View(currentUser); 


      return View(); 
     } 

     // ManageController function 
     private async Task<ApplicationUser> GetCurrentUserAsync() 
     { 
      return await _userManager.FindByIdAsync(HttpContext.User.GetUserId()); 
     } 

    } 
} 
+0

Что такое проблема с вашим кодом? Вы получили сообщение об ошибке? –

+0

В нем говорится, что Identity не содержит определения для «GetUserId» и наилучшего метода расширения ovreload «PrincipalExtensions.GetUserId (ClaimsPrincipal)» требует приемника типа «ClaimsPrincipal», – StuiterSlurf

ответ

5

ответ Джо будет работать нормально, но обратите внимание, есть также более простой метод, который непосредственно принимает ClaimsPrincipal экземпляр и вызывает GetUserId внутренне:

var user = await _userManager.GetUserAsync(User); 
2

вы должны изменить свой код так:

public async Task<IActionResult> Index() 
{ 
    var userId = _userManager.GetUserId(User); 
    ApplicationUser currentUser = await _userManager.FindByIdAsync(userId); 


    if (currentUser.PropBool) 
     return View(currentUser); 


    return View(); 
} 

the way to get the userid changed back in RC2

Смежные вопросы