我的问题与ASP.NET Catch all routing and escaping forward slashes非常相似,但是五年来都没有得到回答。
当包含多个catch-all
和/
字符(编码)时,我无法在ASP.NET Core中“重构”我的+
URL段。
当我使用这样的路由创建API控制器时:
[Route("path/{*catchAll}")]
public string Path(string catchAll = null) {
return catchAll;
}
首先,.NET Core拒绝这样的URL:/path/double%2F%2Fslash%2Bplus
,因为两次转义,为此我将以下内容添加到web.config。
<requestFiltering allowDoubleEscaping="true" />
但是,为这样的URL返回的值:/path/double%2F%2Fslash%2Bplus
输出如下:
双/斜杠加号
实际上,无论URL中有多少%2F
个实例,它们都将合并为一个/
。
现在,当我实际上双重转义像double%252F%252Fslash%252Bcomment
这样的值时,它会单一解析 /
个字符,同时双重解析 +
个字符...输出:
double%2F%2Fslash + comment
但是我不能再解码一次,因为这样会产生:
双//斜杠注释
缺少+
个字符...
ASP.NET Core中的控制器中是否有一种方法来获取/重构包含//
和我的+
字符的值?