両方のプロジェクトが別々に生成された場合、ASP.NET Core Web APIプロジェクトからAngularファイルを提供するにはどのような構成が必要ですか?

O.MeeKoh

タイトルで述べたように、私には互いに独立して生成された2つのプロジェクトがあります。1. ASP.NET Coreプロジェクトはdotnet new webapi -o TestAPI、2。AngularCLIを使用して生成されたAngularプロジェクトを使用して生成されていましたng new TestAngularApp

Web APIプロジェクトはAngularプロジェクトのバックエンドであるため、Angularアプリに提供したいと考えています。私の調査によると、ASP.NET Coreが静的ファイルを提供する方法wwwrootは、Web APIプロジェクトのルートディレクトリにフォルダーを作成し、ng build --prodコマンドによって生成されたすべてのコンテンツをそのwwwrootフォルダー内に配置する必要があるというものです。

次のステップは、次に何を構成する必要があるのか​​わからないところです。これまでのところ、私が追加Startup.csしたConfigureメソッドのファイルに

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

Visual Studioから直接デバッグモードでwebapiプロジェクトを実行すると、これは期待どおりに機能するようになりました。この問題は、webapiを公開してIISにローカルにデプロイするときに発生します。

dotnet publish -c Releaseコマンドを実行すると、期待どおりに.../publishディレクトリを含むすべてのファイルがディレクトリに生成wwwrootされます。

IISで、次にアプリケーションを作成Default Web Siteし、.../publishディレクトリを指定します。

米国のアプリケーション

この時点Failed Request Tracingで、サイトレベルで有効にしました。

アプリケーションを参照すると、webapiはindex.htmlファイルを正しく提供しようとしますが、必要なアセットを読み込めません。

ThePLeagueアプリケーションとそのアプリケーション内にある「wwwroot」ディレクトリの両方に書き換えURLルールを追加しようとしましたが、これは機能しません。私は自分のURL書き換えモジュールが実際に機能することを確認するためにテストしました。

私の質問は、私のwebapiはAngularファイルを正常に提供するために追加の構成を必要としますか?

私が使用する必要がありますSpaFallbackExceptionUseSpaUseSpaStaticFilesまたはのいずれかのSpaプレフィックス拡張メソッドは、仕事にこれを取得するために、または私が既に持っている二つの方法が十分にすべきですか?

あなたが提供できる洞察に感謝します。

更新

回答に記載されているようにベースURLを調整した後、私のファイルは正常に提供されました。ベースURLがに調整されました<base href="/ThePLeague/">ただし、現在の問題は、ページを更新するときです。404エラーが表示されます。URL書き換えルールは、ASP.NET Core webapiと同じディレクトリにwwwrootあり、すべての静的ファイルがあるフォルダー内にはありませんこれは、を有効にするFailed Request Tracing RulesIISwwwrootフォルダー内にルールを作成したときにログが生成されないためです

URL書き換えルール:

ここに画像の説明を入力してください

`<system.webServer>
        <rewrite>
            <rules>
                <rule name="test">
                    <match url=".*" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" />
                    </conditions>
                    <action type="Rewrite" url="wwwroot/index.html" logRewrittenUrl="true" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>`

ページを更新するときにログをトレースします。

ここに画像の説明を入力してください

itminus

理由

アプリケーションを参照すると、webapiはindex.htmlファイルを正しく提供しようとしますが、必要なアセットを読み込めません。

その理由は、デフォルトでは、ということであるindex.htmlによって生成されたng new TestAngularAppセットbaseのように/

<head>
  <meta charset="utf-8">
  <title>TestAngularApp</title>
  <base href="/">
  ....
</head>

This will make all your assets path relative to /. In other words, the compiled scripts referenced in your dist/index.html is relative to the root path /:

<script type="text/javascript" src="runtime.06daa30a2963fa413676.js"></script>
<script type="text/javascript" src="polyfills.d64817aaf614d4221ef9.js"></script>
<script type="text/javascript" src="main.b4ca252475698e802446.js"></script>

Since you're hosting your angular with the Virtual Path of /ThePLeague, your assets URL should be prefixed with /ThePLeague/:

/ThePLeague/runtime.06daa30a2963fa413676.js
/ThePLeague/polyfills.d64817aaf614d4221ef9.js
/ThePLeague/main.b4ca252475698e802446.js

How to fix

  1. Change the base href to /ThePLeague/:

    <base href="/ThePLeague/">
    

    Note there's a trailing / in the base href.

  2. Restart the ThePLeague when need. It should work now.


私のwebapiは、Angularファイルを正常に提供するために追加の構成を必要としますか?

これを機能させるには、SpaFallbackException、UseSpa、UseSpaStaticFiles、またはいずれかのSpaプレフィックス拡張メソッドを使用する必要がありますか?それとも、すでに持っている2つのメソッドで十分ですか?

実際、SPAフォールバックが必要ないapp.UseDefaultFiles();app.UseStaticFiles()場合は、追加した2つのメソッド以外のコードは必要ありません

IISのURL書き換えルールを変更する必要はありません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ