Blazor 和身份
Blazor and Identity
我在 .net core 3.0 中有一个项目,包含 3 个部分:api、共享和 blazor 应用程序。
我在共享项目和一个用户模型中添加了几个模型:
[Table("user")]
public class User : IdentityUser<Guid>
{
[Required(ErrorMessage = "Firstname is required")]
[StringLength(32, ErrorMessage = "Firstname must be 32 charaters maximum")]
[Column("firstname")]
public string Firstname { get; set; }
[Required(ErrorMessage = "Lastname is required")]
[StringLength(32, ErrorMessage = "Lastname must be 32 charaters maximum")]
[Column("lastname")]
public string Lastname { get; set; }
[Required(ErrorMessage = "Thumbnail link is required")]
[StringLength(512, ErrorMessage = "Thumbnail link must be 512 charaters maximum")]
[Column("thumbnail_link")]
public string ThumbnailLink { get; set; }
[Column("birthday")]
public DateTime Birthday { get; set; }
[Required(ErrorMessage = "CreationDate is required")]
[Column("creation_date")]
public DateTime CreationDate { get; set; }
// [Required(ErrorMessage = "User role is required")]
// [Column("user_role")]
// public UserRole UserRole { get; set; }
[Required(ErrorMessage = "Is a banned user is required")]
[Column("is_banned")]
public IsBanned IsBanned { get; set; }
public ICollection<UserRole> UserRoles { get; set; }
public ICollection<UserProgression> UserProgressions { get; set; }
public ICollection<Playlist> Playlists { get; set; }
// public ICollection<Message> MessagesReceived { get; set; }
// public ICollection<Message> MessagesSended { get; set; }
public ICollection<Rating> Ratings { get; set; }
public ICollection<Course> Courses { get; set; }
public ICollection<SubscriptionHistory> SubscriptionHistories { get; set; }
}
但是当我 运行 blazor 端出现错误时
Cannot find declaration of exported type 'System.Threading.Semaphore' from the assembly 'System.Threading, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Fatal error in IL Linker
Unhandled Exception: Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'C:\Users\sebastien\.nuget\packages\system.buffers.5.0\lib\netstandard2.0\System.Bufers.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' ---> Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'C:\Users\sebastien\.nuget\packages\system.buffers.5.0\lib\netstandard2.0\System.Bufers.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
at Mono.Linker.DirectoryAssemblyResolver.Resolve(AssemblyNameReference name, ReaderParameters parameters)
at Mono.Linker.AssemblyResolver.Resolve(AssemblyNameReference
name, ReaderParameters parameters)
at Mono.Linker.LinkContext.Resolve(IMetadataScope scope)
--- End of inner exception stack trace ---
at Mono.Linker.LinkContext.Resolve(IMetadataScope scope)
at Mono.Linker.Steps.ResolveFromAssemblyStep.Process()
at Mono.Linker.Steps.BaseStep.Process(LinkContext context)
at Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step)
at Mono.Linker.Pipeline.Process(LinkContext context)
at Mono.Linker.Driver.Run(ILogger customLogger)
at Mono.Linker.Driver.Execute(String[] args, ILogger customLogger)
at Mono.Linker.Driver.Main(String[] args)
所以用户继承自 IdentityUser,它是 :
的一部分
PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="2.2.0"
我发现 blazor 不支持带有 entity framework 的包。
那么我该如何实现 Identity 呢?如何在我的服务器端和前端之间共享我的模型?我是初学者,很难找到有关该主题的一些信息。
欢迎各种帮助!
谢谢
遗憾的是,您无法与 Blazor 应用程序共享 IdentityUser 模型。 .Net 标准 2.0 上的 Blazor 客户端 运行,Asp.net 核心上的身份资产 运行。您可以在 asp.net 核心端使用 .net 标准代码,但反之则不行。
要解决这个问题,请将您的 IdentityUser 模型移动到服务器,并在您的共享项目中创建一个 "transfer model",其中包含您要向下传输到客户端的属性,然后从中复制每个 属性实际的 AspNetUsers table 行。无论如何,您想要完全控制用户能够看到的有关 AspNetUsers table 的内容。希望这可以帮助!
我在 .net core 3.0 中有一个项目,包含 3 个部分:api、共享和 blazor 应用程序。
我在共享项目和一个用户模型中添加了几个模型:
[Table("user")]
public class User : IdentityUser<Guid>
{
[Required(ErrorMessage = "Firstname is required")]
[StringLength(32, ErrorMessage = "Firstname must be 32 charaters maximum")]
[Column("firstname")]
public string Firstname { get; set; }
[Required(ErrorMessage = "Lastname is required")]
[StringLength(32, ErrorMessage = "Lastname must be 32 charaters maximum")]
[Column("lastname")]
public string Lastname { get; set; }
[Required(ErrorMessage = "Thumbnail link is required")]
[StringLength(512, ErrorMessage = "Thumbnail link must be 512 charaters maximum")]
[Column("thumbnail_link")]
public string ThumbnailLink { get; set; }
[Column("birthday")]
public DateTime Birthday { get; set; }
[Required(ErrorMessage = "CreationDate is required")]
[Column("creation_date")]
public DateTime CreationDate { get; set; }
// [Required(ErrorMessage = "User role is required")]
// [Column("user_role")]
// public UserRole UserRole { get; set; }
[Required(ErrorMessage = "Is a banned user is required")]
[Column("is_banned")]
public IsBanned IsBanned { get; set; }
public ICollection<UserRole> UserRoles { get; set; }
public ICollection<UserProgression> UserProgressions { get; set; }
public ICollection<Playlist> Playlists { get; set; }
// public ICollection<Message> MessagesReceived { get; set; }
// public ICollection<Message> MessagesSended { get; set; }
public ICollection<Rating> Ratings { get; set; }
public ICollection<Course> Courses { get; set; }
public ICollection<SubscriptionHistory> SubscriptionHistories { get; set; }
}
但是当我 运行 blazor 端出现错误时
Cannot find declaration of exported type 'System.Threading.Semaphore' from the assembly 'System.Threading, Version=4.0.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Fatal error in IL Linker
Unhandled Exception: Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'C:\Users\sebastien\.nuget\packages\system.buffers.5.0\lib\netstandard2.0\System.Bufers.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' ---> Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'C:\Users\sebastien\.nuget\packages\system.buffers.5.0\lib\netstandard2.0\System.Bufers.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
at Mono.Linker.DirectoryAssemblyResolver.Resolve(AssemblyNameReference name, ReaderParameters parameters)
at Mono.Linker.AssemblyResolver.Resolve(AssemblyNameReference
name, ReaderParameters parameters)
at Mono.Linker.LinkContext.Resolve(IMetadataScope scope)
--- End of inner exception stack trace ---
at Mono.Linker.LinkContext.Resolve(IMetadataScope scope)
at Mono.Linker.Steps.ResolveFromAssemblyStep.Process()
at Mono.Linker.Steps.BaseStep.Process(LinkContext context)
at Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step)
at Mono.Linker.Pipeline.Process(LinkContext context)
at Mono.Linker.Driver.Run(ILogger customLogger)
at Mono.Linker.Driver.Execute(String[] args, ILogger customLogger)
at Mono.Linker.Driver.Main(String[] args)
所以用户继承自 IdentityUser,它是 :
的一部分PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="2.2.0"
我发现 blazor 不支持带有 entity framework 的包。
那么我该如何实现 Identity 呢?如何在我的服务器端和前端之间共享我的模型?我是初学者,很难找到有关该主题的一些信息。
欢迎各种帮助!
谢谢
遗憾的是,您无法与 Blazor 应用程序共享 IdentityUser 模型。 .Net 标准 2.0 上的 Blazor 客户端 运行,Asp.net 核心上的身份资产 运行。您可以在 asp.net 核心端使用 .net 标准代码,但反之则不行。
要解决这个问题,请将您的 IdentityUser 模型移动到服务器,并在您的共享项目中创建一个 "transfer model",其中包含您要向下传输到客户端的属性,然后从中复制每个 属性实际的 AspNetUsers table 行。无论如何,您想要完全控制用户能够看到的有关 AspNetUsers table 的内容。希望这可以帮助!