#c# #redirect
#c# #перенаправление
Вопрос:
Вот исходная ссылка:
https://localhost:5001/Curriculum/Schedule/Event/EventCreate?initialDate=2020-09-04amp;courseId=1
Ниже приведен процесс создания перенаправления ссылки. AddQueryString — это класс StringExtensions, использующий QueryHelpers.
string passportUrl = string.IsNullOrWhiteSpace(localUrl)
? PassportOptions.PassportUrl
: PassportOptions.PassportUrl.AddQueryString("ReturnUrl", localUrl);
Класс StringExtensions:
public static class StringExtensions
{
public static string AddQueryString(this string uri, string name, string value)
{
if(uri == null) throw new ArgumentNullException(nameof(uri));
return QueryHelpers.AddQueryString(uri, name, value);
}
}
Который перенаправляет на:
https://loginlink/login.page?service=https://localhost:5001/account/loginamp;ReturnUrl=/Curriculum/Schedule/Event/EventCreate?initialDate=2020-09-04&courseId=1"
Проблема возникает в методе /account/ login . returnUrl становится этой строкой:
"/Curriculum/Schedule/Event/EventCreate?initialDate=2020-09-04"
Я добавил параметр CourseID в параметры /account/login для исследования и low, и вот параметр CourseID становится установленным.
Как я мог бы реконструировать returnUrl, чтобы метод входа в систему рассматривал его как один строковый параметр, а не как несколько параметров?
Отредактируйте, чтобы ответить на вопрос — метод входа в систему, который возвращает строку returnUrl «/Curriculum /Schedule/Event /EventCreate?initialDate=2020-09-04». Когда int CourseID добавляется к параметрам, CourseID устанавливается на любой CourseID, который был в URL перенаправления.
public async Task<IActionResult> Login(string returnUrl)
{
}
Еще одна вещь, на которую следует обратить внимание: строка запроса IHttpContextAccessor такова (ticketvalue — это все, что равно).
{?ticket=ticketvalueamp;ReturnUrl=/Curriculum/Schedule/Event/EventCreate?initialDate=2020-09-04amp;courseId=1}
Комментарии:
1. Где находится код, который создает проблемную строку? Использует ли он UrlEncode ?
2. Это просто задача<IActionResult>, которая называется Login . То, что делает метод, не имеет значения — это параметр returnUrl, который не включает полный returnUrl . returnUrl вычисляется как returnUrl и другие параметры после амперсанда.
3. Я говорю о
AddQueryString
методе, который добавляет"ReturnUrl"
к URL. Вы пробовали.AddQueryString("ReturnUrl", Server.UrlEncode(localUrl));
4. Я добавил это к объяснению. Этот код использовался для создания URL-адреса перенаправления. Я не знаю, почему перенаправление отправляет службу returnUrl обратно в виде нескольких параметров. Кроме того, я понятия не имею, что вы подразумеваете под сервером. UrlEncode. Хотите пояснить, что это такое?
5. В моем первом комментарии есть ссылка
Ответ №1:
Как сказал @Rufus L, System.Web.HttpUtility.UrlEncode(localUrl) является ответом на решение этой проблемы.