window.onload = `_Layout.cshtml` 中的函数() 无限循环(ASP.NET 核心)

window.onload = function() in `_Layout.cshtml` Infinity loop(ASP.NET Core)

我想检查我的 _layout.cshtml 中的会话,它可以重定向到 Login 页面,但它无限循环

@using Microsoft.AspNetCore.Http
@inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor
<!DOCTYPE html>
<html lang="en">
<head>
    <script type="text/javascript">
        window.onload = function () {
            if ('@HttpContextAccessor.HttpContext.Session.GetString("username")' === '') {
                location.href = "@Url.Action("Login", "Account")";
            }
        };
    </script>
</head>
<body>

</body>
</html>

根据你的描述,我建议你再写一个条件来检查页面是否进入account/login。如下所示:

注意:如果你使用默认身份,url路径应该是/Identity/Account/Login,所以你应该检查请求路径是不是。此外,我建议您可以直接使用 location.href = "/Identity/Account/Login" 而不是 "@Url.Action("Login", "Account")",因为如果帐户控制器不包含登录方法,它将生成错误的 url。这也会导致无限循环。

<script type="text/javascript">
    window.onload = function () {
    
        if ('@HttpContextAccessor.HttpContext.Session.GetString("username")' === '' && '@HttpContextAccessor.HttpContext.Request.Path' !== '/Identity/Account/Login')
        {
            location.href = "/Identity/Account/Login";
        }
    };
</script>