我正在尝试做一些有点不寻常的事情,允许Nancy将文件作为渲染视图返回,如果请求则作为未渲染文件。我的代码类似于:
public class MyModule : NancyModule
{
public MyModule() : base("/apath")
{
Get["/{Name}"] = parameters =>
{
return View[parameters.Name];
};
Get["/{Name}/AsFile"] = parameters =>
{
return Response.AsFile(parameters.Name);
};
}
}
我的文件相对于/Views/apath
Nancy在将文件作为View返回时效果很好,但在尝试将其作为文件提供时会返回NotFound http状态代码。
我一直在尝试更改传递给Response.AsFile的路径,但还没有运气。
如何让AsFile路线正常工作?
答案 0 :(得分:1)
Nancy并不支持这种开箱即用的理由。
如果我传入的网址如下,那对你想要达到的目标极为可怕的是:
..%2Fweb.config
我可以返回配置文件,访问您的连接字符串,并基本上破解您的网站。
您要做的是在数据库中使用某种查找表,或者使用平面文件或允许您将名称与物理文件相关联的内容。
名称 路径
我的猫 ../图片/猫/我的-cat.jpg
<大骨节病>我的狗骨节病> <大骨节病> ../图片/ CAT /我-dog.jpg 骨节病>
然后,您可以查找名称,返回文件名,然后在现有代码中使用它:
Get["/{Name}/AsFile"] = parameters =>
{
var file = myFileService.GetFile(parameters.Name);
return Response.AsFile(file.Path);
};
此外,如果该文件不存在,那么您知道它可能是一个不安全的请求,并且可以告诉用户迷路!