Wwwroot内からasp.netコアを取得してindex.htmlファイルを提供するにはどうすればよいですか?
これを行う理由は、angular 4アプリをangular CLIを使用して開発し、ビルドプロセス全体を処理するためです。私のasp.netコアプロジェクトのwwwrootディレクトリにビルドするように設定しますが、asp.netコアはそれを提供したくありません。
最初に、コントローラーを介してhtmlファイルを返そうとしました。私はこのルートを試しました:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}");
});
そして、コントローラーで次のようなhtmlファイルを返します。
public IActionResult Index()
{
var webRoot = _env.WebRootPath;
var path = System.IO.Path.Combine(webRoot, "index.html");
return File(path, "text/html");
}
これはうまくいきませんでした。 404 not found例外を返し、パスを指定しましたが、指定したパスはindex.htmlファイルへの正しいパスでした(エクスプローラーにカットアンドペーストして、ファイルを開きました)。
私もこれらをスタートアップで宣言しています:
app.UseStaticFiles();
app.UseDefaultFiles();
その後、デフォルトルートを削除してみました。これで、index.htmlファイルにアクセスできますが、ファイル名を入力した場合のみです。
localhost:58420/index.html
「index.html」を指定せずにドメインのルートにアクセスしようとすると、404エラーが発生します。
Index.htmlをデフォルトページとして参照する適切な方法は何ですか?コントローラーから実行する方がおそらく良いでしょう。なぜなら、それはangular書き換えなしのルーティングと互換性があるからです。
startup.cs
でこれを使用してください:
app.UseFileServer();
以下の略記です:
app.UseDefaultFiles();
app.UseStaticFiles();
...そしてそれそれらを正しい順序にする必要があるという問題を回避します(上記のように)
UseStaticFiles()の前にUseDefaultFiles()を宣言する必要がありました。
app.UseDefaultFiles();
app.UseStaticFiles();
NuGetパッケージをインストールします Microsoft.AspNetCore.StaticFiles 。
今 Startup.Configure
メソッド、追加:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// Serve the files Default.htm, default.html, Index.htm, Index.html
// by default (in that order), i.e., without having to explicitly qualify the URL.
// For example, if your endpoint is http://localhost:3012/ and wwwroot directory
// has Index.html, then Index.html will be served when someone hits
// http://localhost:3012/
app.UseDefaultFiles();
// Enable static files to be served. This would allow html, images, etc. in wwwroot
// directory to be served.
app.UseStaticFiles();
}
wwwroot
ディレクトリから提供されるファイルを取得する必要があります(他のファイルに変更する場合は、UseWebRoot
を使用します)。
ソース: https://docs.Microsoft.com/en-us/aspnet/core/fundamentals/static-files
app.UseDefaultFiles(new DefaultFilesOptions {
DefaultFileNames = new List<string> { "index.html" }
});
app.UseStaticFiles();
UseDefaultFiles
URLリライタはindex.html
のみを検索し、レガシーファイルdefault.htm
、default.html
、およびindex.htm
を検索しないため、これが最適です。