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

时间:2016-02-12 08:17:03

标签: c# asp.net entity-framework asp.net-identity asp.net-core

我正在使用asp.net 5和实体框架7来创建一个Web应用程序,我在使User.Identity工作时遇到了一些问题。在does have one中,它表示它位于名称空间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" ]
  }
}

3 个答案:

答案 0 :(得分:6)

由于ASP.NET Core 1.0(以前的ASP.NET 5)仍处于开发阶段,因此事情经常发生变化。

请查看GitHub Announcements tracker以了解ASP.NET Core 1.0发布的API更改(不要在那里发布问题,它纯粹是为了让ASP.NET Core团队发布公告)。

these announcements之一是关于移动GetUsernameGetUserIdIsSignedIn扩展方法。

  

这些扩展方法引用的声明可通过配置进行配置   目前尚未受到尊重的IdentityOptions   扩展方法,总是引用内置   ClaimTypes.NameIdentifier /名称。

     

已经移动了这些方法来解决这个问题:在= =>之前之后

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 :(得分: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;
        }
    }

答案 2 :(得分:0)

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

所需参考:

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

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

你提到的另一个不同的事情是HttpContext.Current为null,我假设你试图从类库或MVC的范围之外访问用户。

如果您需要从类库中访问HttpContext,则无法像静态属性那样访问它。 需要在该课程中注入

请执行以下操作:

private readonly IHttpContextAccessor _httpContextAccessor;

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

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

_httpContextAccessor.HttpContext.User.GetUserId();