Nancy将视图作为渲染视图或未渲染文件返回

时间:2014-01-11 21:17:23

标签: nancy

我正在尝试做一些有点不寻常的事情,允许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路线正常工作?

1 个答案:

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

此外,如果该文件不存在,那么您知道它可能是一个不安全的请求,并且可以告诉用户迷路!