ارتقاء به ASP.NET Core 3.0
نام بستهی npm سمت کلاینت مخصوص SignalR Core که در ابتدا aspnet/signalr-client@ بود و بعد شد aspnet/signalr@، از این پس microsoft/signalr@ شدهاست!
npm install @microsoft/signalr --save
npm install @microsoft/signalr --save
public class ApplicationSignInManager : SignInManager<User>, IApplicationSignInManager { // ... public ApplicationSignInManager( IApplicationUserManager userManager, IHttpContextAccessor contextAccessor, IUserClaimsPrincipalFactory<User> claimsFactory, IOptions<IdentityOptions> optionsAccessor, ILogger<ApplicationSignInManager> logger, IAuthenticationSchemeProvider schemes, IUserConfirmation<User> confirmation) : base((UserManager<User>)userManager, contextAccessor, claimsFactory, optionsAccessor, logger, schemes, confirmation) {
public class ApplicationUserManager : UserManager<User>, IApplicationUserManager { // ... public ApplicationUserManager( IApplicationUserStore store, IOptions<IdentityOptions> optionsAccessor, IPasswordHasher<User> passwordHasher, IEnumerable<IUserValidator<User>> userValidators, IEnumerable<IPasswordValidator<User>> passwordValidators, ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors, IServiceProvider services, ILogger<ApplicationUserManager> logger, IHttpContextAccessor contextAccessor, IUnitOfWork uow, IUsedPasswordsService usedPasswordsService) : base( (UserStore<User, Role, ApplicationDbContext, int, UserClaim, UserRole, UserLogin, UserToken, RoleClaim>)store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors, services, logger) {
public class ConfirmEmailDataProtectorTokenProvider<TUser> : DataProtectorTokenProvider<TUser> where TUser : class { public ConfirmEmailDataProtectorTokenProvider( IDataProtectionProvider dataProtectionProvider, IOptions<ConfirmEmailDataProtectionTokenProviderOptions> options, ILogger<DataProtectorTokenProvider<TUser>> logger) : base(dataProtectionProvider, options, logger) {
public class CustomSecurityStampValidator : SecurityStampValidator<User> { // ... public CustomSecurityStampValidator( IOptions<SecurityStampValidatorOptions> options, IApplicationSignInManager signInManager, ISystemClock clock, ISiteStatService siteStatService, ILoggerFactory logger) : base(options, (SignInManager<User>)signInManager, clock, logger) {
public interface ILookupNormalizer { string Normalize(string key); }
public interface ILookupNormalizer { string NormalizeEmail(string email); string NormalizeName(string name); }
context.Resource is AuthorizationFilterContext mvcContext
// services.AddSingleton<IActionContextAccessor, ActionContextAccessor>(); private readonly IActionContextAccessor _actionContext; public MyClass(IActionContextAccessor actionContext) { _actionContext = actionContext; } public string GetData() { var routes = _actionContext.ActionContext.RouteData; var val = routes.Values["action"]?.ToString() as string; return val; }
protected override async Task HandleRequirementAsync( AuthorizationHandlerContext context, DynamicPermissionRequirement requirement) { if (!(context.Resource is AuthorizationFilterContext mvcContext)) { return; } var actionDescriptor = mvcContext.ActionDescriptor; actionDescriptor.RouteValues.TryGetValue("area", out var areaName); var area = string.IsNullOrWhiteSpace(areaName) ? string.Empty : areaName;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; namespace ASPNETCoreIdentitySample.Services.Identity { public class DynamicPermissionsAuthorizationHandler : AuthorizationHandler<DynamicPermissionRequirement> { private readonly IHttpContextAccessor _httpContextAccessor; public DynamicPermissionsAuthorizationHandler(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor ?? throw new ArgumentNullException(nameof(httpContextAccessor)); } protected override async Task HandleRequirementAsync( AuthorizationHandlerContext context, DynamicPermissionRequirement requirement) { var routeData = _httpContextAccessor.HttpContext.GetRouteData(); var areaName = routeData?.Values["area"]?.ToString(); var area = string.IsNullOrWhiteSpace(areaName) ? string.Empty : areaName;
services.AddTransient<DoEnableProductTasks>();
public void Configure(IApplicationBuilder app) { ... app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapAreaControllerRoute( "admin", "admin", "Admin/{controller=Home}/{action=Index}/{id?}"); endpoints.MapControllerRoute( "default", "{controller=Home}/{action=Index}/{id?}"); }); }
public void Configure(IApplicationBuilder app) { ... app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); }