以下是原始链接:
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"我为调查和low添加了一个courseId参数到/account/login参数中,可以看到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请求QueryString是这样的(ticketvalue是任何等于的值)。
{?ticket=ticketvalue&ReturnUrl=/Curriculum/Schedule/Event/EventCreate?initialDate=2020-09-04&courseId=1}发布于 2020-10-31 07:32:03
正如@Rufus L所说,System.Web.HttpUtility.UrlEncode(localUrl)是解决这个问题的答案。
https://stackoverflow.com/questions/64615885
复制相似问题