2017-12-06 15 views
1

私はASP.Net Core 2.0.0でNancy 2.0.0を使用しています。静的コンテンツ(この場合はzipファイル)を返すアプリケーションを取得できませんNancyモジュールで定義されたルート。NancyFXの静的コンテンツ(ASP.Netコアあり)

ナンシーのコンベンションは、/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コアを演出しようとしました:

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

しかし、これはどちらか動作しませんでした。私は/Contentと同じ結果を/wwwrootに入れてみました。そして私はContentの異なるケーシングを試しましたが、何も動作していないようです。私は何が欠けていますか?

答えて

3

私はそれを理解しました。問題は、アプリケーションのルートパスとして使用したいものをナンシーに知らせる必要があることでした。 IRootPathProviderから継承するクラスを作成してこれを行いました。ナンシーはスタートアップでこれを継承するクラスを発見するので、どこにでも置くことができます。

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

これが完了したら、私は/Contentの静的コンテンツにアクセスできました。さらに、DefaultNancyBootstrapperから継承するクラスを追加して、静的ディレクトリを追加することもできました(たとえば、/wwwrootを使用したい場合など)。繰り返しますが、ナンシーはスタートアップでこれを見つけますので、どこにでも置くことができます。

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

    conventions.StaticContentsConventions.Add(
     StaticContentConventionBuilder.AddDirectory("wwwroot") 
    ); 
    } 
} 
関連する問題