nancyfx - 从父文件夹提供静态文件

时间:2013-01-21 13:12:11

标签: c# nancy

我想从父目录提供静态文件,因此我可以在应用程序仍在运行时对其进行修改以便于开发。我试图在我的Bootstrapper中添加静态内容约定,如下所示:

this.Conventions.StaticContentsConventions.Add(
  StaticContentConventionBuilder.AddDirectory("content", @"../../content")
);
base.ConfigureConventions(nancyConventions);

但它仍然无法找到那些静态文件。是否无法从父文件夹提供服务?

3 个答案:

答案 0 :(得分:4)

不使用StaticContentConventionBuilder;出于安全原因,我们明确禁止这样做。我们确保用户请求的任何文件始终属于Web根目录的范围,否则人们可能会使用某些路径操作来检索您不希望它们访问的文件。

如果你真的必须这样做(虽然你可以像在其他任何地方一样轻松地编辑web根目录中的文件时你的推理没什么意义),那么你必须自己从头开始编写约定 - 这是一个Func

答案 1 :(得分:0)

您可以在调试版本中实现IRootPathProvider并返回您想要的任何路径。

答案 2 :(得分:0)

如果将这两个文件添加到项目中: https://gist.github.com/elliotwoods/4822f9c512b4f464534d9e01eb6d21b1

然后你可以像这样使用自定义静态文件夹:

public class CustomBootstrapper : DefaultNancyBootstrapper
{

    protected override void ConfigureConventions(NancyConventions nancyConventions)
    {
        base.ConfigureConventions(nancyConventions);

        nancyConventions.StaticContentsConventions.Add(
#if (DEBUG)
            UnsafeStaticContentConventionBuilder.AddDirectory("/StaticContent", "../../StaticContent")
#else
            StaticContentConventionBuilder.AddDirectory("/StaticContent", "StaticContent")
#endif
            );
    }

}

有很好的理由说明为什么你不想在公开的任何事情上这样做。在我的作品中:

  1. git
  2. 不会跟踪TargetDir
  3. 在调试模式期间,我想编辑内容并在应用程序运行时查看结果
  4. 我的应用只能在专用网络上运行
  5. 然后我认为这个例程是安全的