调用 RedirectToAction() 时如何用“+”替换“%2B”

How to replace "%2B" with "+" when calling RedirectToAction()

我在名为 CatalogController:

的 ASP.NET Core 2.1 控制器中使用 RedirectToAction() 方法
return RedirectToAction("search", new { search_string = "example+string" });

这重定向到 URL:

catalog/search/?search_string=example%2Bstring

如何用 + 代替 %2B 编码?

URL 应该看起来像:

catalog/search/?search_string=example+string

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

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

Note: A %20 is the equivalent of a + in an encoded URL, so I'm assuming that will satisfy your requirements.

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

如果出于某种原因,您想要将文字 + 符号视为 space,您将需要明确地执行该替换您的源值(例如,search_string.Replace("+", " "))。