Angular2 SPAで動作するようにVisual Studio 2017 ASP.NET Core 1.1ソリューションを設定しようとしています。ASP.NET Core 1.1内のTypeScriptでWeb APIメソッドURLを正しく計算する方法。溶液?
私は、次のコマンドを使用して、サンプルcsproj
を作成しました:
npm install -g yo generator-aspnetcore-spa
yo aspnetcore-spa
、その後は、Visual Studio 2017 Community Editionの中でそれを開きました。
IIS Express 10を使用している場合は、ルーティング(ルーティング、リフレッシュ、Web API呼び出し)がうまく機能します。
fetchdata.component.tsファイルには、次のようにデータがフェッチ定義しています:
constructor(http: Http) {
http.get('/api/SampleData/WeatherForecasts').subscribe(result => {
this.forecasts = result.json() as WeatherForecast[];
});
}
これは正常に動作しますIISの下のWebアプリケーション内展開するときしかし、ウェブAPIの呼び出しは、Webアプリケーションの名前を含んでいないため、パスに障害が発生しましたIIS Expressでは、パスhttp://localhost:port/api/SampleData/WeatherForecasts
が正しいです。 URLで
http://localhost:port/ApplicationName/api/SampleData/WeatherForecasts
ハードコーディングアプリケーション名は動作しますが、これは実行可能なソリューションではありません。しかし、正しいパスがあるので、これは、IISの下で失敗します。
Iは、適切に塩基(パス)を設定する_Layout.cshtmlを変更したが、それは動作しない。
<!DOCTYPE html>
@{
string basePath = Url.Content("~");
}
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - WebApplicationBasic</title>
<base href="@basePath" />
<link rel="stylesheet" href="~/dist/vendor.css" asp-append-version="true" />
</head>
<body>
Base path: @basePath
@RenderBody()
@RenderSection("scripts", required: false)
</body>
</html>
私が正しく理解している場合、パスを外部に配置されるtsconfig.json
ファイルへの相対であると仮定されますwwwrootフォルダ。それは、なぜtsから生成されたjsからのすべてのパスがWebアプリケーションフォルダを考慮しないのかを説明します。
質問: TypeScriptファイルの呼び出しにURLプレフィックスを動的に指定するにはどうすればよいですか。
はい、動作します。ありがとうございました! ' 'は ' 'または ' 'でなければなりません。あなたが言及したように余分な '/'。 –
Alexei