【发布时间】:2020-10-30 21:15:11
【问题描述】:
这里是原文链接:
https://localhost:5001/Curriculum/Schedule/Event/EventCreate?initialDate=2020-09-04&courseId=1
以下是构建链接重定向的过程。 AddQueryString 是一个使用 QueryHelpers 的 StringExtensions 类。
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/login&ReturnUrl=%2FCurriculum%2FSchedule%2FEvent%2FEventCreate%3FinitialDate%3D2020-09-04%26courseId%3D1"
问题发生在 /account/login 方法中。 returnUrl 变成这个字符串:
"/Curriculum/Schedule/Event/EventCreate?initialDate=2020-09-04"
我在 /account/login 参数中添加了一个 courseId 参数以进行调查,并且看到 courseId 参数已设置。 如何重建 ReturnUrl,以便 Login 方法将其视为一个字符串参数而不是多个参数?
编辑以回答问题 - 获取 returnUrl 字符串“/Curriculum/Schedule/Event/EventCreate?initialDate=2020-09-04”的登录方法。当 int courseId 添加到参数时, courseId 将设置为重定向 url 中的任何 courseId。
public async Task<IActionResult> Login(string returnUrl)
{
}
需要注意的其他事项:IHttpContextAccessor Request QueryString 是这样的(ticketvalue 是任何等于的值)。
{?ticket=ticketvalue&ReturnUrl=/Curriculum/Schedule/Event/EventCreate?initialDate=2020-09-04&courseId=1}
【问题讨论】:
-
产生问题字符串的代码在哪里?是用UrlEncode吗?
-
这只是一个名为 Login 的任务
。该方法的作用无关紧要 - returnUrl 参数不包括完整的 returnUrl。 returnUrl 被评估为 returnUrl 和符号后面的其他参数。 -
我说的是
AddQueryString方法,它将"ReturnUrl"添加到Url。你试过.AddQueryString("ReturnUrl", Server.UrlEncode(localUrl)); -
我在解释中添加了这个。这是用于构造重定向 URL 的代码。我不知道为什么重定向将服务 returnUrl 作为多个参数发送回来。另外,我不知道 Server.UrlEncode 是什么意思。介意说明一下吗?
-
我的第一条评论中有一个链接