2017-11-17 1 views
1

私はケストレルで静的ファイルをホスティングしているWebサーバのための小規模なプロジェクトのためのStartup.csファイルでこれを持っている:app.UseDefaultFiles in Kestrel何もしていませんか?

public class Startup 
{ 
    public void ConfigureServices(IServiceCollection services) 
    { 
     services.Configure<MvcOptions>(options => 
     { 
      options.Filters.Add(new RequireHttpsAttribute()); 
     }); 
    } 
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     var configBuilder = new ConfigurationBuilder() 
      .SetBasePath(Directory.GetCurrentDirectory()) 
      .AddJsonFile("config.json"); 
     var config = configBuilder.Build(); 

     var options = new RewriteOptions() 
      .AddRedirectToHttps(); 

     app.UseRewriter(options); 

     DefaultFilesOptions defoptions = new DefaultFilesOptions(); 
     defoptions.DefaultFileNames.Clear(); 
     defoptions.DefaultFileNames.Add("index.html"); 
     app.UseDefaultFiles(defoptions); 


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

     loggerFactory.AddConsole(config.GetSection(key: "Logging")); 
    } 
} 

しかし、それはindex.htmlをか何かをロードしようとしません。手動でアクセスすると、実際に動作します。

アイデア?

おかげ

+1

index.htmlファイルへのパス - wwwrootの下にありますか? – CalC

答えて

2

理想的には、あなたのindex.htmlウェブルート・パス(wwwroot)の下でなければなりません、しかし、あなたのファイルは、(それがために表示される)、あなたはDefaultFilesOptions.FileProviderを指定するようにコードを変更する必要がありますContentRootPath\static下にある場合次のように:

PhysicalFileProvider fileProvider = new PhysicalFileProvider(
    Path.Combine(Directory.GetCurrentDirectory(), @"static")); 
DefaultFilesOptions defoptions = new DefaultFilesOptions(); 
defoptions.DefaultFileNames.Clear(); 
defoptions.FileProvider = fileProvider; 
defoptions.DefaultFileNames.Add("index.html"); 
app.UseDefaultFiles(defoptions); 

app.UseStaticFiles(); 
app.UseStaticFiles(new StaticFileOptions() 
{ 
    FileProvider = fileProvider, 
    RequestPath = new PathString("") 
}); 

注:あなたがCにしたいだけの場合には、おそらく(最初の行にというよりも、Directory.GetCurrentDirectory()IHostingEnvironment.ContentRootPathenv.ContentRootPath)を使用して、オフに優れているがある時点でWebHostBuilderにコンテンツルートを設定してください)。

+1

ありがとう、完璧に動作します。 DefaultFilesOptionsでFileProviderを使用しなければならないこともわかっていませんでした(-_-) –

関連する問題