Mic*_*hel 5 iis kestrel asp.net-core
我有一个 asp.net core 2.2 mvc action 方法,GET
它来自客户端 JavaScript 代码:
[Route("/search/{searchterm}")]
public IActionResult Search(string searchterm)
{
// code
}
Run Code Online (Sandbox Code Playgroud)
现在,当我使用搜索字符串导航搜索时,abc/def
浏览器中的 uri 是/search/abc%2Fdef
因为 / 被编码
我得到了一个404
,因为路由属性解码了斜杠,并且说/search/abc/def
与我的路线不匹配。我想要的是将%2F
视为正常的内容,因此搜索字符串abc/def
在我的操作方法中。
有趣(?)的事情是,这不会发生在我从 VS2017(我猜它运行 Kestrel)运行的本地机器上,而只会发生在它在 IIS 上运行的测试服务器上。
这是 IIS 的事情吗?或者负载均衡器正在做些什么?
Mét*_*ule 12
您可以使用星号表示searchterm
可以包含斜杠。这称为全能参数,如下所示:
[Route("/search/{**searchterm}")]
public IActionResult Search(string searchterm)
{
// code
}
Run Code Online (Sandbox Code Playgroud)
从文档:
您可以使用星号 (
*
) 或双星号 (**
) 作为路由参数的前缀,以绑定到 URI 的其余部分。这些被称为包罗万象的参数。例如,blog/{**slug}
匹配任何以 开头/blog
并在其后具有任何值的URI,该值分配给 slug 路由值。Catch-all 参数也可以匹配空字符串。当路由用于生成 URL 时,catch-all 参数会转义适当的字符,包括路径分隔符 (/) 字符。例如,
foo/{*path}
带有路由值的路由会{ path = "my/path" }
生成foo/my%2Fpath
. 注意转义的正斜杠。要往返路径分隔符,请使用**
路由参数前缀。foo/{**path}
带有{ path = "my/path" }
生成的路由foo/my/path
。
归档时间: |
|
查看次数: |
2447 次 |
最近记录: |