ciao!

per dovere di cronaca, per il discorso dei caratteri ho usato direttamente la validazione tramite model che già c'era:
codice:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;


namespace BCSoft.Clonident.Shared.Model
{
    public class ChangePasswordRequest
    {
        [Required]
        [StringLength(50)]
        [EmailAddress]
        public string Email { get; set; }


        [Required]
        [StringLength(16, ErrorMessage = "{0} Lunghezza minima tra {2} e {1}.", MinimumLength = 8)]
        [RegularExpression(@"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).{8,16}$", ErrorMessage = "........")]
        public string Password { get; set; }


        [Required]
        [Compare(nameof(Password), ErrorMessage = "Password non corrispondente")]
        public string ConfirmPassword { get; set; }


        public string Code { get; set; }
    }
}
il resto lo devo ancora implementare!