我有以下路线:
Get["/details/{id:int}/{token}"]
除了令牌部分包含编码的正斜杠(" /" ="%2f")之外,它按预期工作。
抛出404的示例:
/details/1/QeH7oMezCNS3y%2fASnD4dGw%3d%3d
工作正常的示例(不包括#34; /"
)/details/1/QeH7oMezCNS3yASnD4dGw%3d%3d
如果这是设计的,我还需要处理其他任何字符吗?
答案 0 :(得分:3)
您需要在路线中使用贪婪段(*):
Get["/details/{id:int}/{token*}"]
答案 1 :(得分:1)
这很可能是与double encoding有关的已知错误。
答案 2 :(得分:0)
我遇到了同样的问题并通过编写我自己的URLencode和URLdecode函数解决了它的问题,这些函数用另一个从未在令牌中使用的char替换所有“/”(例如';')然后再转换为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);
}