タイトルで述べたように、私には互いに独立して生成された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ファイルを正常に提供するために追加の構成を必要としますか?
私が使用する必要がありますSpaFallbackException
、UseSpa
、UseSpaStaticFiles
またはのいずれかのSpa
プレフィックス拡張メソッドは、仕事にこれを取得するために、または私が既に持っている二つの方法が十分にすべきですか?
あなたが提供できる洞察に感謝します。
更新
回答に記載されているようにベースURLを調整した後、私のファイルは正常に提供されました。ベースURLがに調整されました<base href="/ThePLeague/">
。ただし、現在の問題は、ページを更新するときです。404エラーが表示されます。URL書き換えルールは、ASP.NET Core webapiと同じディレクトリにwwwroot
あり、すべての静的ファイルがあるフォルダー内にはありません。これは、を有効にするFailed Request Tracing Rules
とIIS
、wwwroot
フォルダー内にルールを作成したときにログが生成されないためです。
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>`
ページを更新するときにログをトレースします。
アプリケーションを参照すると、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
Change the base href to /ThePLeague/
:
<base href="/ThePLeague/">
Note there's a trailing /
in the base
href.
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]
コメントを追加