Использование шаблонной идентификации Razor в приложении MVC - returnURL содержит 2F по умолчанию и null при передаче параметра - PullRequest
0 голосов
/ 10 июля 2020

Я рассмотрел здесь похожие вопросы, но не смог найти подходящего ответа. . Net Core 2.2 MVC приложение, использующее для аутентификации скаффолд Razor Identity. Использует модели страниц для входа, регистрации и т. Д. c.

2 проблемы,

1 - всякий раз, когда я запускаю свое приложение локально, страница входа по умолчанию попадает на URL:

https://localhost:44373/Identity/Account/Login?ReturnUrl=%2F

Я не уверен, где устанавливается %2F

2 - Когда я запускаю свое приложение и перехожу к URL-адресу контроллера, который требует входа в систему: например,

https://localhost:44373/Identity/Account/Login?ReturnUrl=/MyImages/20200709_1554_myimage.png

Это приведет меня к экрану входа в систему с правильным параметром URL. Как только код попадает в мой OnPostAsyn c в моем Login.cs, параметр ReturnUrl кажется нулевым. Не знаю почему. Вход в систему просто приводит меня к маршруту моего приложения, а не к URL-адресу, который я хотел go к.

Вот мой код, Login.cs OnPostAsyn c

    public async Task<IActionResult> OnPostAsync(string ReturnUrl)
    {

        if (!String.IsNullOrEmpty(ReturnUrl) && Url.IsLocalUrl(ReturnUrl))
        {
            return Redirect(ReturnUrl);
        }
        else
        {
            ReturnUrl = ReturnUrl ?? Url.Content("~/Home/Index");
        }


        if (ModelState.IsValid)
        {
            // This doesn't count login failures towards account lockout
            // To enable password failures to trigger account lockout, set lockoutOnFailure: true
            var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);
            if (result.Succeeded)           
            {
                var user = await _userManager.FindByEmailAsync(Input.Email);
                _logger.LogInformation("User logged in.");
                return RedirectToAction("Index", "Home", new { Id = user.Id});
            }
            if (result.RequiresTwoFactor)
            {
                return RedirectToPage("./LoginWith2fa", new { ReturnUrl = ReturnUrl, RememberMe = Input.RememberMe });
            }
            if (result.IsLockedOut)
            {
                _logger.LogWarning("User account locked out.");
                return RedirectToPage("./Lockout");
            }
            else
            {
                ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                return Page();
            }
        }
        // If we got this far, something failed, redisplay form
        return Page();
    }

Login.cs html

@page
@model LoginModel

@{
    ViewData["Title"] = "Log in";
}

<h1>@ViewData["Title"]</h1>
<div class="row">
    <div class="col-md-4">
        <section>
            <form id="account" asp-page="/Account/Login"  method="post">
                
                <hr />
                <div asp-validation-summary="All" class="text-danger"></div>
                <div class="form-group">
                    <label asp-for="Input.Email"></label>
                    <input asp-for="Input.Email" class="form-control" />
                    <span asp-validation-for="Input.Email" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="Input.Password"></label>
                    <input asp-for="Input.Password" class="form-control" />
                    <span asp-validation-for="Input.Password" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <div class="checkbox">
                        <label asp-for="Input.RememberMe">
                            <input asp-for="Input.RememberMe" />
                            @Html.DisplayNameFor(m => m.Input.RememberMe)
                        </label>
                    </div>
                </div>
                <div class="form-group">
                    <button type="submit" class="btn btn-primary">Log in</button>
                </div>
                <div class="form-group">
                    <p>
                        <a id="forgot-password" asp-page="./ForgotPassword">Forgot your password?</a>
                    </p>
                    <p>
                        <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
                    </p>
                    <p>
                        The main screen should also give details on who to contact in case of questions, comments, etc. This must be the email of the primary Regional Admin.
                    </p>
                </div>
                
            </form>
           
        </section>
    </div>
    <div class="col-md-6 col-md-offset-2">
        
    </div>
</div>

@section Scripts {
    <partial name="_ValidationScriptsPartial" />
}

Любые советы приветствуются, спасибо

...