您可以处理OnRedirectToLogin
事件以为重定向过程提供您自己的逻辑。这是一个示例实现:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(o =>
{
o.Events = new CookieAuthenticationEvents
{
OnRedirectToLogin = ctx =>
{
var relativeRedirectUri = new Uri(ctx.RedirectUri).PathAndQuery;
context.Response.Headers["Location"] = relativeRedirectUri;
context.Response.StatusCode = 401;
return Task.CompletedTask;
}
};
});
ctx.RedirectUri
传入的属性是绝对的,因此上面的代码创建了一个相对副本并使用了它。
它替代的默认实现要复杂一些,因为它支持返回401的AJAX请求和执行重定向的非AJAX请求。如果您需要同时支持两者,请查看源文件并进行相应的修改。