当 ASP.NET Core 身份验证方案重定向到登录页面时,它会将绝对 URL 发送到浏览器。
有可能使这个网址相对吗?
当 ASP.NET Core 身份验证方案重定向到登录页面时,它会将绝对 URL 发送到浏览器。
有可能使这个网址相对吗?
您可以处理该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 请求。如果您需要同时支持两者,请查看源代码并进行相应修改。