Ich erstellte benutzerdefinierte Benutzermodell für Entitätsrahmen und ASP.net-Identität. Ich überprüfte andere Antworten hier, sie sind nah an meiner Frage, aber Antworten nicht meine Anforderung anwenden. also frage ich hier.Nach Identity Custom User gibt User.Identity.GetUserId() falschen Typ als Zeichenfolge zurück
Alles ist in Ordnung. Aber wenn ich versuche, Benutzer-ID wie zu bekommen:
ApplicationUser user = await manager.FindByIdAsync(User.Identity.GetUserId());
User.Identity.GetUserId() return String. Ich habe es wie Guid konfiguriert. Aber es gibt String :(
Meine Klassen hier sind. Bitte helfen Sie mir, wie kann ich User.Identity.GetUserId() in einem Web-api-Controller als Guid bekommen?
public class GuidUserLogin : IdentityUserLogin<Guid>
{
}
public class GuidUserRole : IdentityUserRole<Guid>
{
}
public class GuidUserClaim : IdentityUserClaim<Guid>
{
}
public class GuidRole : IdentityRole<Guid, GuidUserRole>
{
}
//public class GuidUserContext : IdentityDbContext<ApplicationUser, GuidRole, Guid, GuidUserLogin, GuidUserRole, GuidUserClaim> { }
public class GuidUserStore : UserStore<ApplicationUser, GuidRole, Guid, GuidUserLogin, GuidUserRole, GuidUserClaim>
{
public GuidUserStore(DbContext context)
: base(context)
{
}
}
public class GuidRoleStore : RoleStore<GuidRole, Guid, GuidUserRole>
{
public GuidRoleStore(DbContext context)
: base(context)
{
}
}
public class ApplicationUser : IdentityUser<Guid, GuidUserLogin, GuidUserRole, GuidUserClaim>, ICreateDateRequired
{
public ApplicationUser()
{
}
[Key]
public Guid UserId { get; set; }
public override Guid Id { get; set; }
public override string UserName { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public string Password { get; set; }
//Matching Attributes
public override string Email { get; set; }
public string FacebookId { get; set; }
public string TwitterId { get; set; }
public string GoogleId { get; set; }
public override string PhoneNumber { get; set; }
public string SocialAccessToken { get; set; }
public string Gender { get; set; }
public virtual List<Shade> Shades { get; set; }
[InverseProperty("ParentUser")]
public virtual List<UserFriendship> Friends { get; set; }
public virtual List<Contact> Contacts { get; set; }
//[Column(TypeName = "DateTime2")]
//[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime? CreateDate { get; set; }
public string ImageUrl { get; set; }
public string ThumbUrl { get; set; }
public string BackUrl { get; set; }
public virtual List<ContactDetail> UserContactDetails { get; set; }
}
Aber wenn ich versuche, Guid-ID in Web-API-Controller zu bekommen, gibt es String wieder zurück. var stringResult = IdentityExtensions.GetUserId (RequestContext.Principal.Identity); – Ras
Klingt wie ein Namespace-Problem, Sie erhalten die falsche Erweiterungsmethode. –
Danke. Ich habe es behoben, wie du gesagt hast. Und jetzt gibt es einen Fehler.Ein oder mehrere Validierungsfehler wurden während der Modellerzeugung festgestellt: GuidUserStore:: EntityType 'GuidUserStore' hat keinen Schlüssel definiert. Definieren Sie den Schlüssel für diesen EntityType. UserStores: EntityType: EntitySet 'UserStores' basiert auf dem Typ 'GuidUserStore', für den keine Schlüssel definiert sind. – Ras