Asp.net-core-static-files

提供:Dev Guides
移動先:案内検索

ASP.NET Core-静的ファイル

この章では、ファイルの操作方法を学びます。 ほとんどすべてのWebアプリケーションが必要とする重要な機能は、ファイルシステムからファイル(静的ファイル)を提供する機能です。

  • ファイルシステムにあるJavaScriptファイル、画像、CSSファイルなどの静的ファイルは、ASP.NET Coreアプリケーションがクライアントに直接提供できるアセットです。
  • 通常、静的ファイルはWebルート(wwwroot)フォルダーにあります。
  • デフォルトでは、ファイルシステムから直接ファイルを提供できる唯一の場所です。

アプリケーションでこれらのファイルを提供する方法を理解する簡単な例を見てみましょう。

ここでは、単純なHTMLファイルをFirstAppDemoアプリケーションに追加し、このHTMLファイルをWebルート(wwwroot)フォルダーに移動する必要があります。 ソリューションエクスプローラーでwwwrootフォルダーを右クリックし、[追加]→[新しいアイテム]を選択します。

新しいアイテムを追加

中央のペインで、* HTMLページ*を選択して indexl と呼び、*追加*ボタンをクリックします。

Htmlページ

シンプルな* indexl *ファイルが表示されます。 以下に示すように、いくつかの簡単なテキストとタイトルを追加しましょう。

<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8"/>
      <title>Welcome to ASP.NET Core</title>
   </head>

   <body>
      Hello, Wolrd! this message is from our first static HTML file.
   </body>
</html>

アプリケーションを実行してブラウザーで indexl に移動すると、アプリケーションには現在何もないため、 app.Run ミドルウェアが例外をスローすることがわかります。

Index Html

提供するファイルシステム上のファイルを検索するミドルウェアはありません。 この問題を解決するには、ソリューションエクスプローラーでプロジェクトを右クリックし、[NuGetパッケージの管理]を選択して、* NuGetパッケージマネージャー*に移動します。

Nugetパッケージ

静的ファイルミドルウェアを見つける Microsoft.AspNet.StaticFiles を検索します。 このnugetパッケージをインストールして、Configureメソッド内にミドルウェアを登録するために使用できる追加のメソッドが必要になります。

次のプログラムに示すように、Configureメソッドに UseStaticFiles を追加します。

using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http;

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;

namespace FirstAppDemo {
   public class Startup {
      public Startup() {
         var builder = new ConfigurationBuilder()
            .AddJsonFile("AppSettings.json");
         Configuration = builder.Build();
      }
      public IConfiguration Configuration { get; set; }

     //This method gets called by the runtime.
     //Use this method to add services to the container.
     //For more information on how to configure your application,
     //visit http://go.microsoft.com/fwlink/?LinkID=398940
      public void ConfigureServices(IServiceCollection services) {
      }

     //This method gets called by the runtime.
     //Use this method to configure the HTTP request pipeline.
      public void Configure(IApplicationBuilder app) {
         app.UseIISPlatformHandler();
         app.UseDeveloperExceptionPage(); app.UseRuntimeInfoPage();
         app.UseStaticFiles();

         app.Run(async (context) => {
            throw new System.Exception("Throw Exception");
            var msg = Configuration["message"];
            await context.Response.WriteAsync(msg);
         });
      }

     //Entry point for the application.
      public static void Main(string[] args) => WebApplication.Run<Startup>(args);
   }
}

オプションをオーバーライドして、いくつかの異なる構成パラメーターを渡さない限り、静的ファイルが行うことは、特定の要求に対して*要求パス*を調べることです。 この要求パスは、ファイルシステムおよびファイルシステム上にあるものと比較されます。

  • 静的ファイルが使用できるファイルを見つけた場合、静的ファイルはそのファイルを提供し、次のミドルウェアを呼び出しません。

  • 一致するファイルが見つからない場合は、次のミドルウェアを続行します。

    *Startup.cs* ファイルを保存して、ブラウザを更新しましょう。

Startup.CS File

indexlファイルが表示されます。 wwwrootの内部のどこにでも、JavaScriptファイル、CSSファイル、またはHTMLファイルを置くと、それらを提供できます。

  • indexlをデフォルトファイルにしたい場合、これはIISが常に備えていた機能です。
  • IISには、検索するデフォルトファイルのリストをいつでも指定できます。 誰かがディレクトリのルート、この場合はWebサイトのルートに到達した場合、IISがindexlという名前の何かを見つけた場合、そのファイルを自動的に提供します。
  • いくつかの変更を行うことから始めましょう。 最初に、強制エラーを削除してから、別のミドルウェア、UseDefaultFilesを追加する必要があります。 以下は、Configureメソッドの実装です。
//This method gets called by the runtime.
//Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app)  {
   app.UseIISPlatformHandler();
   app.UseDeveloperExceptionPage();

   app.UseRuntimeInfoPage();
   app.UseDefaultFiles();
   app.UseStaticFiles();

   app.Run(async (context) => {
      var msg = Configuration["message"];
      await context.Response.WriteAsync(msg);
   });
}
  • このミドルウェアは、着信要求を調べて、それがディレクトリのルート用であるかどうか、および一致するデフォルトファイルがあるかどうかを確認します。

  • このミドルウェアのオプションをオーバーライドして、検索するデフォルトファイルを指定できますが、Indexlはデフォルトでデフォルトファイルの1つです。

    *Startup.cs* ファイルを保存し、ブラウザでWebアプリケーションのルートに移動します。

Webアプリケーションブラウザー

indexlがデフォルトのファイルであることを確認できます。 UseStaticFilesの後にUseDefaultFilesがある場合、同じ結果が得られないため、ミドルウェアをインストールする順序は重要です。

UseDefaultFilesとUseStaticFilesを使用する場合は、Microsoft.aspnet.staticfiles、NuGetパッケージ、および* FileServerミドルウェア*内にある別のミドルウェアも必要になる場合があります。 これには基本的に、デフォルトファイルと静的ファイルが正しい順序で含まれています。

//This method gets called by the runtime.
//Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app) {
   app.UseIISPlatformHandler();
   app.UseDeveloperExceptionPage();

   app.UseRuntimeInfoPage();
   app. UseFileServer();

   app.Run(async (context) => {
      var msg = Configuration["message"];
      await context.Response.WriteAsync(msg);
   });
}
*Startup.cs* ファイルをもう一度保存します。 ブラウザを更新すると、次のスクリーンショットに示すのと同じ結果が表示されます。

同じ結果