【问题标题】:single parameter string being seen as multiple parameters c# QueryHelpers单个参数字符串被视为多个参数 c# QueryHelpers
【发布时间】: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 是什么意思。介意说明一下吗?
  • 我的第一条评论中有一个链接

标签: c# redirect


【解决方案1】:

正如@Rufus L 所说,System.Web.HttpUtility.UrlEncode(localUrl) 是解决这个问题的答案。

【讨论】:

    猜你喜欢
    • 2015-02-23
    • 2013-11-23
    • 2019-08-14
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多