我有以下路线:
Get["/details/{id:int}/{token}"]它按预期工作,除非令牌部分包含编码的正斜杠("/“= "%2f")。
抛出404的示例:
/details/1/QeH7oMezCNS3y%2fASnD4dGw%3d%3d工作正常的示例(不包括"/“):
/details/1/QeH7oMezCNS3yASnD4dGw%3d%3d如果这是经过设计的,我还需要处理其他字符吗?
发布于 2014-08-27 08:37:56
您需要在路由中使用贪婪段(*):
Get["/details/{id:int}/{token*}"]发布于 2014-08-27 08:35:56
这很可能是与双编码有关的已知错误。
发布于 2017-02-27 11:37:46
我也遇到了同样的问题,并通过编写自己的URLencode和URLdecode函数来解决这个问题,这些函数将所有的"/“替换为另一个字符,这个字符从未在令牌中使用(例如';'),然后在编辑的令牌上使用HttpUtility.URLencode() (译码器函数反过来)。
贪婪段解决方案不容易工作,因为我在路由的中间有这个令牌,而不是在最后,还有其他可能干扰贪婪段的类似路径。
public static string UrlEncode(string path)
{
return HttpUtility.UrlEncode(path.Replace(Path.DirectorySeparatorChar, Variables.PATH_SEP));
}
public static string UrlDecode(string path)
{
return HttpUtility.UrlDecode(path).Replace(Variables.PATH_SEP, Path.DirectorySeparatorChar);
}https://stackoverflow.com/questions/25515579
复制相似问题