You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nancy框架URL路径无法识别句号,文件名后缀丢失问题求助

解决Nancy路由中文件名后缀丢失的问题

我之前也踩过Nancy这个路由匹配的坑!你遇到的问题是因为Nancy默认会把路径里的句号(.)当成路由分段的分隔符,所以{fileName}参数只会捕获到句号前面的部分,直接导致后缀丢失了。

快速修复:给路由参数添加正则约束

你只需要修改路由定义,给fileName参数加上正则约束,明确告诉Nancy要捕获包含句号的完整文件名:

Get["/{company_id}/storage/{fileName:.*}"] = x => 
{ 
    return ReadFileFromStorage(x.company_id, x.fileName); 
};

这里的:.*是正则表达式,意思是匹配任意字符(包括句号),这样Nancy就会把/storage/之后的所有内容都赋值给fileName参数,不管里面有多少个句号。

如果想要更严谨一点(比如避免意外捕获到斜杠,虽然你的场景里不会出现这种情况),也可以用[^/]+作为约束——它匹配除了斜杠之外的所有字符,同样能完整包含带后缀的文件名:

Get["/{company_id}/storage/{fileName:[^/]+}"] = x => 
{ 
    return ReadFileFromStorage(x.company_id, x.fileName); 
};

验证效果

修改路由后再访问http://localhost/MOCK/storage/foo.xml,你会发现:

  • x.fileName的值变成了完整的"foo.xml"
  • this.Request.Path也会正确显示为"/MOCK/storage/foo.xml"
  • 完全不需要对句号做URL转义(比如%2Exml),正常格式的URL就能被正确解析。

内容的提问来源于stack exchange,提问作者Daniel Williams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:20:08