使用ASP.Net Core的NancyFX中的静态内容

时间:2017-12-06 02:35:58

标签: c# asp.net-core nancy

我正在使用Nancy 2.0.0与ASP.Net Core 2.0.0,我无法让我的应用程序从Nancy模块中定义的路由返回静态内容(在本例中为zip文件)。 / p>

Nancy约定是将静态内容存储在/Content中,而ASP.Net Core约定是将其存储在/wwwroot中,但我无法让我的应用识别它们。

我的Startup.Configure方法如下所示:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseStaticFiles();            
    app.UseOwin(b => b.UseNancy());
}

我的模块路线如下:

Get("/big_file", _ => {
    return Response.AsFile("wwwroot/test.zip");
});

但是当我点击这条路线时,南希总是返回404。我也尝试将ASP.Net Core引导到Nancy期望的静态目录,如下所示:

app.UseStaticFiles(new StaticFileOptions()
{
    FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"Content")),
    RequestPath = new PathString("/Content")
});

但这也不起作用。我已尝试将文件放在/Content/wwwroot中,但结果相同。我尝试了Content的不同外壳,但似乎没有任何效果。我错过了什么?

1 个答案:

答案 0 :(得分:3)

我明白了。问题是我需要让Nancy知道我想用什么作为应用程序的根路径。我是通过创建一个继承自IRootPathProvider的类来完成的。 Nancy将在Startup上发现任何继承此类的类,因此您可以将它放在任何您想要的位置。

public class DemoRootPathProvider : IRootPathProvider
{
  public string GetRootPath()
  {
    return Directory.GetCurrentDirectory();
  }
}

一旦这样,我就可以访问/Content中的静态内容。另外,我能够通过添加继承自/wwwroot的类来添加其他静态目录(例如,如果我想坚持使用DefaultNancyBootstrapper)。再一次,Nancy会在Startup上找到它,所以你可以把它放在任何地方。

public class DemoBootstrapper : DefaultNancyBootstrapper
{
  protected override void ConfigureConventions(NancyConventions conventions)
  {
    base.ConfigureConventions(conventions);

    conventions.StaticContentsConventions.Add(
        StaticContentConventionBuilder.AddDirectory("wwwroot")
    );
  }
}