具有用于ajax请求的带有authorize属性的控制器方法。当我未登录时发出请求时,我将重定向到登录页面。我需要一个未经授权的信息,而不是登录页面的数据。要更改此设置,我重写了“ OnRedirectToLogin”事件。
以下是代码:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
{
options.LoginPath = "/Identity/Account/Login";
options.Events.OnRedirectToLogin = ctx => Test(ctx);
});
private Task Test(RedirectContext<CookieAuthenticationOptions> ctx)
{
if (ctx.Request.ContentType != null && ctx.Response.StatusCode == (int) HttpStatusCode.OK)
{
if (ctx.Request.ContentType.Contains("application/json"))
{
ctx.Response.StatusCode = (int) HttpStatusCode.Unauthorized;
}
}
else
{
ctx.Response.Redirect(ctx.RedirectUri);
}
return Task.CompletedTask;
}
所有更改均有效,但是当我尝试登录默认登录页面时,什么都没有发生。
那里是什么问题,或者您有更好的选择来实现相同的结果而没有这个问题?
感谢您的帮助!
更新: 自该帖子上线以来,我一直在寻找时间。现在,我发现登录有效,但是控制器上的身份验证显然不再有效。
答案 0 :(得分:0)
更多调查后,我找到了此解决方案:
services.AddAuthentication(options =>
{
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
}).AddCookie(options =>
{
options.LoginPath = "/Identity/Account/Login";
options.Events.OnRedirectToLogin = ctx =>
{
if (ctx.Request.ContentType != null && ctx.Response.StatusCode == (int) HttpStatusCode.OK)
{
if (ctx.Request.ContentType.Contains("application/json"))
{
ctx.Response.StatusCode = (int) HttpStatusCode.Unauthorized;
}
}
else
{
ctx.Response.Redirect(ctx.RedirectUri);
}
return Task.CompletedTask;
};
});
决定性因素是仅设置“ DefaultChallengeScheme”