我想从父目录提供静态文件,因此我可以在应用程序仍在运行时对其进行修改以便于开发。我试图在我的Bootstrapper中添加静态内容约定,如下所示:
this.Conventions.StaticContentsConventions.Add(
StaticContentConventionBuilder.AddDirectory("content", @"../../content")
);
base.ConfigureConventions(nancyConventions);
但它仍然无法找到那些静态文件。是否无法从父文件夹提供服务?
答案 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
);
}
}
有很好的理由说明为什么你不想在公开的任何事情上这样做。在我的作品中:
然后我认为这个例程是安全的