Не все параметры запроса отображаются в возвращаемом 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-адрес не имеет параметров запроса 0 или 1. Если текущий 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 не приходит.

Но когда браузер переходит к URL-адресу /Account/Login, когда срок действия файла cookie истек, он показывает правильный URL-адрес /Account/Login?ReturnUrl=/Inspection?inspectionID=1&processTypeID=2

Может ли кто-нибудь указать мне, почему это происходит и как это исправить?

Спасибо, Зехан


person Zehan Jurangpathy    schedule 05.03.2020    source источник
comment
Если ReturnUrl — это строка запроса, то какой тип processTypeID?   -  person OO7    schedule 05.03.2020


Ответы (1)


Кодирование значения URI перенаправления решило это для меня.

В моем случае у меня была страница blazor с:

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

где RedirectUri возвращает полный путь к текущей странице, включая несколько параметров запроса.

Я изменил ссылку на:

<a href="auth/Signin?redirectUri=@UrlEncode(RedirectUri)">Sign In</a>, ключ UrlEncode(RedirectUri), что решило проблему для меня.

UrlEncode можно найти в пространстве имен System.Web.HttpUtility.

person rjb    schedule 21.08.2020