我想使用OnRedirectToLogin
事件(存在于 ASP.NET Core上,但不存在于.NET Framework 4.7中(来操纵 ASP.NET Identity将未经身份验证的候选人重定向到登录页面的方式。
- 上述还有其他选择吗?
- 这是否意味着Microsoft开始在.NET Core和.NET Framework之间创建功能差距,以及使用.NET Core而不是.NET Framework启动新项目的另一个原因?
上述还有其他选择吗?
是的。子类AuthorizeAttribute
并重写AuthorizeAttribute.HandleUnauthorizedRequest
方法。 HandleUnauthorizedRequest
仅在用户未获得授权时触发。
public class CustomAuthorize : AuthorizeAttribute
{
public override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filter.Result = new RedirectToRouteResult(...);
}
}
然后在您通常使用[Authorize]
的任何地方使用[CustomAuthorize]
。
这是否意味着Microsoft开始在.NET Core和.NET Framework之间创建功能差距,以及使用.NET Core而不是.NET Framework启动新项目的另一个原因?
由于AspNetCore
是一个完全不同的UI框架,具有新的设计,而不是ASP.NET MVC
的演变,您可以期望它们之间存在差距。虽然,除非您是想要同时支持这两个框架的库开发人员,否则我看不出这是一个问题。
您可以在 CookieAuthenticationProvider 上使用 OnApplyRedirect 事件。请注意,上下文参数是 CookieApplyRedirectContext,而不是标准的 HttpContext。
更多信息在这里
var options = new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = "Account/Login",
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)),
OnApplyRedirect = context =>
{
//do something here
}
}
};
}