0

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プレフィックスを動的に指定するにはどうすればよいですか。

答えて

1

絶対パスの代わりに相対パスを使用する必要があります。 http.get(...)通話から/を削除するだけです。

すでに基本パスを正しく設定してあります(これは、<base href="~/"/>を実行すると簡単に実行できます)。これは、ベースパスが常に相対URLの開始点として使用されることを確認します。これはajax呼び出しにも当てはまります。新しいブラウザはすべて既に<base href=""/>をサポートしています。私の以前の投稿hereも見てください。

+0

はい、動作します。ありがとうございました! ''は ''または ''でなければなりません。あなたが言及したように余分な '/'。 – Alexei

関連する問題