2017-09-15 14 views
5

とStaticFiles私は、次のプロジェクト階層があります。.NETのコア - カスタムDefaultFiles-定義

-MyDotNetProject 
... 
L wwwroot 
L angular 
    L src 
    L angulardev.html 
    L index.html 

を、今私は、アプリケーションの起動時に出発点としてangulardev.html使用したいです。

Startup.cs/Configureで次のように試しましたが、動作しません。

DefaultFilesOptions defaultFilesOptions = new DefaultFilesOptions(); 
defaultFilesOptions.DefaultFileNames.Clear(); 
defaultFilesOptions.DefaultFileNames.Add("angulardev.html"); 
app.UseDefaultFiles(defaultFilesOptions); 

var path = Path.Combine(env.ContentRootPath, "angular/src"); 
var provider = new PhysicalFileProvider(path); 
var options = new StaticFileOptions(); 
options.RequestPath = ""; 
options.FileProvider = provider; 
app.UseStaticFiles(options); 
+0

あなたは、両方のFileProviderプロパティを設定する必要がありますDefaultFileOptionsおよびStaticFIleOptionsです。それ以外の場合、DefaultFilesミドルウェアはwwwrootを探します。 – OdeToCode

答えて

4

私はこれを使用:あなたは静的ファイルからロードされている場所を「デフォルト」のファイルがからロードされている場合、それは変更されません変更すると

 app.Use(async (context, next) => { 
      await next(); 

      if (context.Response.StatusCode == 404 && 
       !Path.HasExtension(context.Request.Path.Value) && 
       !context.Request.Path.Value.StartsWith("/api/")) 
      { 
       context.Request.Path = "/angulardev.html"; 

       await next(); 
      } 
     }); 

     app.UseAuthentication(); 
     app.UseDefaultFiles(); 
     app.UseStaticFiles(); 
     app.UseMvcWithDefaultRoute(); 
+0

ありがとうございます。残念ながら、これは私が説明した階層では機能しません。これは、angulardev.htmlがwwwrootというフォルダにある場合です。 – MaxPower

+0

あなたは解決策を見つけることができてうれしいです。乾杯! –

0

を。

あなたはGitHubの上の実際のミドルウェア・コードを見れば:https://github.com/damianh/StaticFilesMiddleware/blob/475aef7f56b92d6420ec700dcb397841b6842ed8/src/Microsoft.Owin.StaticFiles/DefaultFilesMiddleware.cs

あなたは、まだ手動でファイルをロードしようとしている見ることができます。 StaticFilesにどのようなオプションを設定しても構いません。私はあなたがデフォルトのページを持っていないと仮定しているので、ほとんどの場合、スタティックファイルミドルウェアを使用してを使用しています。

app.UseDefaultFiles()を呼び出すと、設定ではなくミドルウェアであることに注意してください。実際には、そのファイルをあなたに返そうとする何かを「やっている」のです。

とにかく、標準以外のフォルダを使用してデフォルトページを読み込む場合は、同じプロバイダを渡すだけで済みます。たとえば、次のコードはあなたのために正常に動作する必要があります:

DefaultFilesOptions defaultFilesOptions = new DefaultFilesOptions(); 
defaultFilesOptions.DefaultFileNames.Clear(); 
defaultFilesOptions.DefaultFileNames.Add("angulardev.html"); 
defaultFilesOptions.FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"angular", @"src")); 
defaultFilesOptions.RequestPath = new PathString(""); 
app.UseDefaultFiles(defaultFilesOptions); 


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

それは@Irenaリッチからミックスで私のために動作するようになりましたし、私のかつてのソリューション:

if (env.IsDevelopment()) 
{ 
    app.Use(async (context, next) => 
    { 
      await next(); 
      if (context.Response.StatusCode == 404 && 
        !Path.HasExtension(context.Request.Path.Value) && 
        !context.Request.Path.Value.StartsWith("/api/")) 
      { 
       context.Request.Path = "/src/angulardev.html"; 
       await next(); 
      } 
     }); 

     DefaultFilesOptions options = new DefaultFilesOptions(); 
     options.DefaultFileNames.Clear(); 
     options.DefaultFileNames.Add("angulardev.html"); 
     app.UseDefaultFiles(options); 
     app.UseStaticFiles(); 

     app.UseStaticFiles(new StaticFileOptions() 
     { 
      FileProvider = new PhysicalFileProvider(
       Path.Combine(Directory.GetCurrentDirectory(), @"angular")), 
       RequestPath = "" 
     }); 
} 
関連する問題