Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# nancyfx-从父文件夹提供静态文件_C#_Nancy - Fatal编程技术网

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

}
有很好的理由解释为什么你不想在任何公开的场合这样做。在我看来:

  • git不跟踪TargetDir
  • 在调试模式下,我想编辑内容,并在应用程序运行时查看结果
  • 我的应用程序只能在专用网络上运行

  • 那么我认为这个程序是安全的

    谢谢你的解释。仍然爱着南希!我觉得对这件事最好的回应是“这很危险,但这是你怎么做的”,而不是“自己想清楚这并不难”