ViewComponent无法识别AspNetCore.Identity“用户”

时间:2019-05-27 06:04:12

标签: c# .net-core

我正在尝试根据此处的这篇文章为一系列复选框创建一个ViewComponent:

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-2.2

这个答案在这里: https://stackoverflow.com/a/42853705/2300177

对于我尝试做的事情来说,这似乎是一个完美的案例。但是,我已经创建了ViewComponent来包含标识UserManager以获取userId

using BlogPlayground.Data;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;

namespace BlogPlayground.ViewComponents
{
    public class LatestArticlesViewComponent : ViewComponent
    {
        private readonly ApplicationDbContext _context;
        private readonly UserManager<IdentityUser> _userManager;


        public LatestArticlesViewComponent(ApplicationDbContext context, UserManager<IdentityUser> userManager)
        {
            _context = context;
            _userManager = userManager;
        }

        public async Task<IViewComponentResult> InvokeAsync()
        {
            string userId = _userManager.GetUserId(User);

            var lastArticles = await _context.Article
                                            .OrderByDescending(a => a.CreatedDate)
                                            .Take(howMany)
                                            .ToListAsync();
            return View(lastArticles);
        }
    }
}

问题是当我拨打此行时:

string userId = _userManager.GetUserId(User);

我遇到User的错误消息,内容为:

  

无法从“ System.Security.Principal.IPrincipal”转换为   'System.Security.Claims.ClaimsPrincipal'

这个精确的代码在我所有的控制器中都有效,我什至不知道User的来源。看起来像魔术,但我猜是Identity固有的某个地方吗?还是我只是想念控制器中包含的东西? (我在控制器中搜索了“用户”,但无法将其链接到任何内容。)

我正在使用Pomelo MySQL nuget软件包吗?我不会这样。

任何人都知道我缺少什么以及如何消除此错误吗?

更新:似乎可以使用它(至少它消除了错误):

string userId = _userManager.GetUserId(Request.HttpContext.User);

是同一件事吗?我是否缺少using语句? Visual Studio(2017)通常会向我提示我所缺少的内容。

1 个答案:

答案 0 :(得分:0)

请确保在services.AddDefaultIdentity中配置了app.UseAuthentication并启用了Identity Startup

需要这样做才能通过dependency injection将其提供给应用程序,因此您可以将其加载到LatestArticlesViewComponent中。

在此处查看详细信息:Introduction to Identity on ASP.NET Core