web-dev-qa-db-ja.com

サブフォルダーの下でasp.netコアアプリケーションをホストする方法

Kestrelを使用してLinux上で実行されているasp.netコアアプリがあります。

ポート80でIPOKにバインドします。

ただし、nginxリバースプロキシサイトは、ルート以外のパスでアプリをホストする必要があります。

http://somesite.com/myapp

これで問題ありません。アプリは読み込まれますが、アプリはmyappパスを認識しません。そのため、ルートからコンテンツパスリソースを読み込もうとします。したがって、cssリソースなどはロードされません。

URLパスを知るために、実行時にアプリを理想的に構成するにはどうすればよいですか。

更新:

私は、Startup.configureでapp.UsePathBase( "/ myapp");を使用していることを発見しました。アプリはこのパスでリクエストを処理するので役立ちますが、静的ファイルリクエストは/myapp/images/example.jpgで、404を返します。

画像フォルダはwwwrootにあります。これは、UseStaticFilesで理解しているデフォルトです。

/ myappが事実上仮想であることを理解するためのリクエストを期待していました。

10
ScottC

OK-アプリを「仮想ディレクトリ」で実行するには、次の2つのことを行う必要がありました。

スタートアップconfigureメソッド内で、アプリのベースパスを設定し、静的ファイルのパスを指定する必要がありました。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
 ...
 app.UseStaticFiles("/myapp");
 app.UsePathBase("/myapp");
 ...
}

アプリは/からも実行されます-これが望ましいかどうかはわかりませんが、今のところ大きな問題ではありません。

6
ScottC

私にとって(.NET Core 3.1を使用)は少し異なり、ScottCの回答を使用すると、my-app/wwwrootではなくmy-appディレクトリのルートを検索していたため静的ファイルを見つけることができませんでした。

この設定はStartup.csで機能しました:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    ...
    if (env.IsDevelopment())
    {
        ...
    }
    else
    {
        ...
        app.UsePathBase("/my-app");
    }

    app.UseStaticFiles();
    ...

}

1
John M

スコットC、

Webコンテンツがwwwrootの下にあると、Startupクラスのconfigureセクションにapp.UseStaticFiles()を追加する必要があります。

以下の例を参照してください。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseStaticFiles();
}

あなたを助けてくれることを願っています。

1
Alan Silva