并非所有查询参数都显示在返回url中



我已经构建了一个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包含用户所在的当前Url。在当前Url具有01查询参数之前,此操作一直有效。如果当前url有2个查询参数,那么只有第一个查询参数被传递给返回url。Login方法如下。

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

例如。如果当前URL是/Inspection?inspectionID=1&processTypeID=2,那么返回的URL只得到/Inspection?inspectionID=1processtypeID参数不会出现。

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

有人能告诉我为什么会发生这种情况以及如何解决吗?

谢谢,泽汉

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

在我的情况下,我有一个blazor页面,上面有:

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

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

我将链接更改为:

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

可以在名称空间CCD_ 14上找到CCD_。

相关内容

  • 没有找到相关文章

最新更新