getUserId 在 rc1.final 的 User.Identity 中不存在

本文关键字:Identity 不存在 User rc1 final getUserId | 更新日期: 2023-09-27 18:34:15

我正在使用 asp.net 5和实体框架7来创建Web应用程序,并且在User.Identity工作时遇到了一些问题。在文档中,它说它位于命名空间User.Identity.Core中。当我通过 nuget 安装它时,它会找到该方法。但是,我与UserManager发生冲突,因为它说它存在于User.Identity.CoreUser.Identity.EntityFramework中。如果我卸载User.Identity.EntityFramework,则不允许我从用户模型中的IdentityUser继承。我需要GetUserId才能获得当前登录的旅馆用户...我也尝试使用

System.Web.HttpContext.Current.User.Identity.GetUserId(); 

但是似乎也存在类似的问题,它说Current HttpContext中不存在。

有谁知道解决这个问题的方法?

使用 project.json 更新:

{
  "userSecretsId": "aspnet5-FrkKantine-1a8100b9-6fce-44b4-ac9d-6038ecf705f6",
  "version": "1.0.0-*",
  "compilationOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "EntityFramework.Commands": "7.0.0-rc1-final",
    "EntityFramework.Core": "7.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
    "Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final",
    "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc1-final",
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
    "Microsoft.AspNet.Razor": "4.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
    "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
    "Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final"
  },
  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel",
    "ef": "EntityFramework.Commands"
  },
  "frameworks": {
    "dnx451": { },
    "dnx50": {}
  },
  "exclude": [
    "wwwroot",
    "node_modules"
  ],
  "publishExclude": [
    "**.user",
    "**.vspscc"
  ],
  "scripts": {
    "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ]
  }
}

getUserId 在 rc1.final 的 User.Identity 中不存在

由于 ASP.NET Core 1.0(前 ASP.NET 5(仍在开发中,因此情况经常发生变化。

请查看 GitHub 公告跟踪器,了解 ASP.NET Core 1.0 版本的 API 更改(不过不要在那里发布问题,这纯粹是供 ASP.NET 核心团队发布公告(。

其中一个公告是关于GetUsernameGetUserIdIsSignedIn扩展方法的移动。

这些扩展方法所引用的声明可通过 目前未被 始终引用内置的扩展方法 声明类型.名称标识符/名称。

这些方法已被移动以解决此问题:之前 => 之后

User.GetUserId => UserManager.GetUserId(User)
User.GetUserName => UserManager.GetUserName(User)
User.IsSignedIn => SignInManager.IsSignedIn(User)

编辑:我刚刚注意到它是针对 RC2 的,因此除非您使用夜间构建提要,否则可能还不适用于您。

您的问题可能来自选择错误的包名称,因为它们在过去已被重命名六次

EntityFramework.MicrosoftSqlServerMicrosoft.AspNet.Identity.EntityFramework应该是适合你的。(使用 RC2,他们再次重命名为 Microsoft.EntityFrameworkCore.*Microsoft.AspNetCore.*,所有版本都重置为 1.0(

解决方案 1:

试试这个 :

using Microsoft.AspNet.Identity;

然后:

string userId = User.Identity.GetUserId();

解决方案 2 :

通常你应该确保用户是否经过身份验证,然后获取用户信息/id:

if (model != null)
    {
        model.IsUserAuthenticated = HttpContext.User.Identity.IsAuthenticated;
        if (model.IsUserAuthenticated)
        {
            model.UserName = HttpContext.User.Identity.Name;
        }
    }

如果您使用的是 .Net Core <= RC1 Update 1,您仍然可以使用 GetUserId(( 扩展名。

所需参考资料:

using Microsoft.AspNet.Identity;
using System.Security.Claims;

用法: var id = User.GetUserId();(而不是User.Identity.GetUserId()(

您提到的另一件不同的事情是关于 null HttpContext.Current,我假设您正在尝试从类库或 MVC 范围之外访问用户。

如果需要从类库访问 HttpContext,则不能像访问静态属性一样访问它。它需要在该类中注入

只需执行以下操作:

private readonly IHttpContextAccessor _httpContextAccessor;
public MyRepository(IHttpContextAccessor httpContextAccessor)
{
    _httpContextAccessor = httpContextAccessor;
}

然后你可以通过类中的所有方法使用它,如下所示:

_httpContextAccessor.HttpContext.User.GetUserId();