【问题标题】:How to replace "%2B" with "+" when calling RedirectToAction()调用 RedirectToAction() 时如何用“+”替换“%2B”
【发布时间】:2020-02-04 19:17:04
【问题描述】:

我在名为 CatalogController 的 ASP.NET Core 2.1 控制器中使用 RedirectToAction() 方法:

return RedirectToAction("search", new { search_string = "example+string" });

这会重定向到一个 URL:

catalog/search/?search_string=example%2Bstring

如何将%2B 编码替换为+

网址应改为:

catalog/search/?search_string=example+string

【问题讨论】:

    标签: asp.net-core redirect urlencode asp.net-core-2.1


    【解决方案1】:

    RedirectToAction() 方法假定通过RouteValues 参数传递的任何值都是编码的; RedirectToAction() 方法将代表您处理 URL 编码。因此,当您输入 + 时,它会将其视为文字 + 符号,而不是编码空间。

    %2B 是文字 + 符号的正确编码。如果您希望在 URL 中编码一个空格,那么您应该在您的 RouteValues 字典中输入一个空格(例如,search_string = "example string")。这会将空间编码为%20

    注意:%20 等同于编码 URL 中的 +,所以我假设它会满足您的要求。

    如果您的 search_string 值来自 URL 编码源,您将需要首先解码它使用例如WebUtility.UrlDecode()。也就是说,如果您要从操作参数或绑定模型中检索 search_string 值,则应该已经为您完成了此解码。

    如果出于某种原因,您想要将文字 + 符号视为空格,则需要在源值上显式执行替换(例如,search_string.Replace("+", " "))。

    【讨论】:

    • 杰里米,感谢您的回答。但是我在 URL 中搜索了一个带有“+”的解决方案来替换为空格,因为我自己生成了字符串。所以在下一个位置,我看到了 StackOverflow URL 字符串交换空间到“-”的示例。它完全解决了我的问题。再见!
    猜你喜欢
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2011-04-07
    • 2012-09-29
    • 1970-01-01
    相关资源
    最近更新 更多