0

我已经构建了一个 ASP.NET CORE MVC 应用程序并使用 cookie 身份验证。下面是我在 Startup.cs 文件中的代码。

services.AddAuthentication(options =>
{
    // these must be set other ASP.NET Core will throw exception that no
    // default authentication scheme or default challenge scheme is set.
    options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
  .AddCookie(options =>
   {
       options.LoginPath = "/Account/Login/";
   });

当 cookie 过期时,应用程序将重定向到/Account/Login包含用户当前 url 的 Return Url 的路径。这在当前 url 具有01查询参数之前工作正常。如果当前 url 有 2 个查询参数,那么只有第一个查询参数被传递给返回 URL。登录方法如下。

public IActionResult Login(string returnUrl)
{
   return View(new LogInViewModel { ReturnUrl = returnUrl });
}

例如,如果当前 URL 是/Inspection?inspectionID=1&processTypeID=2,则返回 url 仅获取/Inspection?inspectionID=1. processtypeID参数不来。

但是当cookie过期时浏览器导航到/Account/LoginURL时,它会显示正确的url/Account/Login?ReturnUrl=/Inspection?inspectionID=1&processTypeID=2

谁能指出我为什么会发生这种情况以及如何解决这个问题?

谢谢,泽涵

4

1 回答 1

1

编码重定向 uri 的值为我解决了这个问题。

就我而言,我有一个 blazor 页面:

<a href="auth/Signin?redirectUri=@RedirectUri">Sign In</a>

whereRedirectUri返回完整的当前页面路径,包括多个查询参数。

我将链接更改为:

<a href="auth/Signin?redirectUri=@UrlEncode(RedirectUri)">Sign In</a>,关键是UrlEncode(RedirectUri),它为我解决了这个问题。

UrlEncode可以在命名空间上找到System.Web.HttpUtility

于 2020-08-21T09:43:56.330 回答