4

我想从父目录提供我的静态文件,以便在应用程序仍在运行时修改它们以便于开发。我试图在我的引导程序中添加一个静态内容约定,如下所示:

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

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

4

3 回答 3

4

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

如果您真的必须这样做(尽管您可以像在其他任何地方一样轻松地编辑 Web 根目录中的文件时,您的推理毫无意义),那么您将不得不自己从头开始编写约定 - 它是一个 Func。

于 2013-01-21T13:50:26.063 回答
0

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

于 2015-06-30T12:15:18.857 回答
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 不跟踪 TargetDir
  2. 在调试模式下,我想在应用程序运行时编辑内容并查看结果
  3. 我的应用程序只会在专用网络上运行

那我觉得这个套路是安全的

于 2018-05-29T11:47:16.717 回答