Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使cookie认证方案生成相对登录url而不是绝对登录url?_C#_Asp.net Core_Cookie Authentication - Fatal编程技术网

C# 如何使cookie认证方案生成相对登录url而不是绝对登录url?

C# 如何使cookie认证方案生成相对登录url而不是绝对登录url?,c#,asp.net-core,cookie-authentication,C#,Asp.net Core,Cookie Authentication,当ASP.NET核心身份验证方案重定向到登录页面时,它会将绝对url发送到浏览器 是否可以将此url设置为相对url?,它以前定义了重定向中使用的位置头,指定URI必须是绝对的。自2014年以来,这一点已被取代,允许在位置标题中使用相对路径。然而,由于在这段时间内经过了15年左右,仍然会发送一个绝对位置以保持兼容性。诚然,现在我们快到2020年了,我想现在大多数客户端实际上都支持相对位置,但至少目前,ASP.NET核心仍然发送绝对值。,它以前定义了重定向中使用的位置头,指定URI必须是绝对值。自

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

是否可以将此url设置为相对url?

,它以前定义了重定向中使用的
位置
头,指定URI必须是绝对的。自2014年以来,这一点已被取代,允许在
位置
标题中使用相对路径。然而,由于在这段时间内经过了15年左右,仍然会发送一个绝对位置以保持兼容性。诚然,现在我们快到2020年了,我想现在大多数客户端实际上都支持相对位置,但至少目前,ASP.NET核心仍然发送绝对值。

,它以前定义了重定向中使用的
位置
头,指定URI必须是绝对值。自2014年以来,这一点已被取代,允许在
位置
标题中使用相对路径。然而,由于在这段时间内经过了15年左右,仍然会发送一个绝对位置以保持兼容性。诚然,现在我们快到2020年了,我想大多数客户端在这一点上都会支持相对位置,但至少目前,ASP.NET Core仍然发送绝对值。

您可以处理事件,为重定向过程提供自己的逻辑。下面是一个示例实现:

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请求。如果需要同时支持这两种功能,请查看并相应地修改。

您可以处理该事件,为重定向过程提供自己的逻辑。下面是一个示例实现:

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请求。如果需要同时支持这两种功能,请查看并相应地修改