Блазор и личность - PullRequest
       26

Блазор и личность

0 голосов
/ 01 ноября 2019

У меня есть проект в .net core 3.0, состоящий из 3 частей: API, Shared и 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; }

    }

Но когда я запускаю блейзор, я получаю сообщение об ошибке

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\4.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\4.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" Версия= "2.2.0"

Я обнаружил, что Blazor не поддерживает пакет с сущностью Framework.

Так как я могу реализовать Identity? Как я могу делиться моими моделями между моей серверной частью и внешним интерфейсом? Я новичок, и мне очень трудно найти какую-либо информацию по этому вопросу.

Любая помощь приветствуется!

Спасибо

1 Ответ

2 голосов
/ 01 ноября 2019

К сожалению, вы не можете поделиться моделью IdentityUser с приложением Blazor. Blazor на стороне клиента работает на .Net standard 2.0, ваши идентификационные активы работают на ядре Asp.net. Вы можете использовать стандартный код .net на стороне ядра asp.net, но не наоборот.

Чтобы обойти это, переместите вашу модель IdentityUser на сервер и создайте «модель передачи» в вашем общем проекте со свойствами, которые вы хотите передать клиенту, а затем скопируйте каждое свойство из фактической таблицы AspNetUsers. ряд. Вы хотите иметь полный контроль над тем, что пользователь в любом случае может видеть в таблице AspNetUsers. Надеюсь это поможет!

...