2017-11-17 12 views
1

나는 황조롱이 정적 파일을 호스팅하는 웹 서버를위한 작은 프로젝트에 대한 Startup.cs 파일이 있습니다Kestrel의 app.UseDefaultFiles가 아무 것도하지 않습니까?

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

참고 : 첫 번째 줄에 IHostingEnvironment.ContentRootPath (env.ContentRootPath)보다는 Directory.GetCurrentDirectory()이 (다만 경우에 당신은 C 원하는 사용하여 아마 더 낫다 어떤 시점에서 WebHostBuilder에 콘텐츠 루트를 지정하십시오.

+1

고마워, 완벽하게 작동합니다. DefaultFilesOptions와 함께 FileProvider를 사용해야한다는 것을 알지 못했습니다 (-_-). –