C# nancyfx-从父文件夹提供静态文件
我希望从父目录提供静态文件,以便在应用程序仍在运行时修改它们以便于开发。我尝试在引导程序中添加静态内容约定,如下所示:C# nancyfx-从父文件夹提供静态文件,c#,nancy,C#,Nancy,我希望从父目录提供静态文件,以便在应用程序仍在运行时修改它们以便于开发。我尝试在引导程序中添加静态内容约定,如下所示: this.Conventions.StaticContentsConventions.Add( StaticContentConventionBuilder.AddDirectory("content", @"../../content") ); base.ConfigureConventions(nancyConventions); public class Custo
this.Conventions.StaticContentsConventions.Add(
StaticContentConventionBuilder.AddDirectory("content", @"../../content")
);
base.ConfigureConventions(nancyConventions);
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
);
}
}
但它仍然无法找到这些静态文件。无法从父文件夹提供服务吗?不能使用StaticContentConventionBuilder;出于安全原因,我们明确不允许这样做。我们确保用户请求的任何文件始终在web根目录的范围内,否则人们可能会使用一些路径操作来检索您不希望他们检索的文件
如果您真的必须这样做(尽管您的推理没有什么意义,因为您可以像在其他地方一样轻松地编辑web根目录中的文件),然后您必须自己从头开始编写约定-这是一个函数。您可以在调试版本中实现
IRootPathProvider
,并返回您想要的任何路径。如果您将这两个文件添加到项目中:
然后可以使用自定义静态文件夹,如下所示:
this.Conventions.StaticContentsConventions.Add(
StaticContentConventionBuilder.AddDirectory("content", @"../../content")
);
base.ConfigureConventions(nancyConventions);
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
);
}
}
有很好的理由解释为什么你不想在任何公开的场合这样做。在我看来:
那么我认为这个程序是安全的谢谢你的解释。仍然爱着南希!我觉得对这件事最好的回应是“这很危险,但这是你怎么做的”,而不是“自己想清楚这并不难”