gpt4 book ai didi

asp.net-core - asp.net 核心 Controller 操作路由使用编码斜杠来确定路由(仅限 IIS)

转载 作者:行者123 更新时间:2023-12-02 08:52:14 27 4
gpt4 key购买 nike

我有一个 asp.net core 2.2 mvc action 方法和 GET它来自客户端 JavaScript 代码:

[Route("/search/{searchterm}")]
public IActionResult Search(string searchterm)
{
// code
}

现在,当我使用搜索字符串导航搜索时 abc/def浏览器中的 uri 是 /search/abc%2Fdef因为/被编码

我得到一个 404但是,因为路由属性解码了斜杠并显示 /search/abc/def不符合我的路线。
我要的是治疗 %2F作为普通内容,搜索字符串为 abc/def在我的操作方法里面。

有趣的是(?),这不会发生在我从 VS2017(我猜它运行 Kestrel)运行的本地机器上,而只会在它在 IIS 上运行的测试服务器上发生。

这是 IIS 的事情吗?或者负载均衡器正在做些什么?

最佳答案

您可以使用星号来表示 searchterm可以包含斜杠。这称为 catch-all parameter ,看起来像这样:

[Route("/search/{**searchterm}")]
public IActionResult Search(string searchterm)
{
// code
}
从文档:

You can use an asterisk (*) or double asterisk (**) as a prefix to a route parameter to bind to the rest of the URI. These are called a catch-all parameters. For example, blog/{**slug} matches any URI that starts with /blog and has any value following it, which is assigned to the slug route value. Catch-all parameters can also match the empty string.

The catch-all parameter escapes the appropriate characters when the route is used to generate a URL, including path separator (/) characters. For example, the route foo/{*path} with route values { path = "my/path" } generates foo/my%2Fpath. Note the escaped forward slash. To round-trip path separator characters, use the ** route parameter prefix. The route foo/{**path} with { path = "my/path" } generates foo/my/path.

关于asp.net-core - asp.net 核心 Controller 操作路由使用编码斜杠来确定路由(仅限 IIS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59358445/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com