首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果值已编码为正斜杠,则NancyFx路由似乎已中断。

如果值已编码为正斜杠,则NancyFx路由似乎已中断。
EN

Stack Overflow用户
提问于 2014-08-26 21:39:56
回答 3查看 992关注 0票数 2

我有以下路线:

代码语言:javascript
复制
Get["/details/{id:int}/{token}"]

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

抛出404的示例:

代码语言:javascript
复制
/details/1/QeH7oMezCNS3y%2fASnD4dGw%3d%3d

工作正常的示例(不包括"/“):

代码语言:javascript
复制
/details/1/QeH7oMezCNS3yASnD4dGw%3d%3d

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-27 08:37:56

您需要在路由中使用贪婪段(*):

代码语言:javascript
复制
Get["/details/{id:int}/{token*}"]
票数 3
EN

Stack Overflow用户

发布于 2014-08-27 08:35:56

这很可能是与双编码有关的已知错误。

票数 1
EN

Stack Overflow用户

发布于 2017-02-27 11:37:46

我也遇到了同样的问题,并通过编写自己的URLencode和URLdecode函数来解决这个问题,这些函数将所有的"/“替换为另一个字符,这个字符从未在令牌中使用(例如';'),然后在编辑的令牌上使用HttpUtility.URLencode() (译码器函数反过来)。

贪婪段解决方案不容易工作,因为我在路由的中间有这个令牌,而不是在最后,还有其他可能干扰贪婪段的类似路径。

代码语言:javascript
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25515579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档