如果值已编码正斜杠,则NancyFx路径似乎已损坏

时间:2014-08-26 21:39:57

标签: url-routing urlencode nancy

我有以下路线:

Get["/details/{id:int}/{token}"]

除了令牌部分包含编码的正斜杠(" /" ="%2f")之外,它按预期工作。

抛出404的示例:

/details/1/QeH7oMezCNS3y%2fASnD4dGw%3d%3d

工作正常的示例(不包括#34; /"

/details/1/QeH7oMezCNS3yASnD4dGw%3d%3d

如果这是设计的,我还需要处理其他任何字符吗?

3 个答案:

答案 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);
}