温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - How to make cookie auth scheme generate relative login url instead of absolute one?
asp.net-core c# cookie-authentication

c# - 如何使cookie身份验证方案生成相对登录URL而不是绝对登录URL?

发布于 2020-03-27 10:21:51

当ASP.NET Core身份验证方案重定向到登录页面时,它将向浏览器发送绝对URL。

是否可以使这个URL相对?

查看更多

查看更多

提问者
Pavel Voronin
被浏览
331
Kirk Larkin 2019-07-03 22:39

您可以处理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请求。如果您需要同时支持两者,请查看源文件并进行相应的修改。