2017-10-03 3 views
0

Angularと.Net Core 2.0のハイブリッドテンプレートを使用しています。APIを呼び出すAngular4サービスのベストプラクティス.Net Core

私のコンポーネントページには、いくつかの基準に基づいて人がリストされ、うまく機能します。ただし、各ユーザーには部門IDがあり、別のAPIメソッドから部門名を取得したいと考えています。

すべての情報をリストするSQLビューを作成できましたが、必要なすべてのクエリを返すメソッドを呼び出すことができました。したがって、私のコンポーネントページでは、{{personDeptId}}を使用して部門名を返すサービスを作成する必要があります。

[HttpGet("[action]/{login?}")] 
    public async Task<String> getUserDeprtString(String login) 
    {... 
    } 

上記のメソッドは、部門名を正常に返します。私の問題はフロント側の実装です。

私はサービス、DataServiceの作成:

getPersonDepart(login: String): Observable<string> { 
    return this.http.get(this.baseUrl + 'api/User/getUserDeprtString/' + login).map(this.extractData) 
     .do(data => console.log('getProduct: ' + JSON.stringify(data))) 
     .catch(this.handleError); 
} 

とコンポーネントで:

getName(name: String) { 
    return this.dataService.getPersonDepart(name); } 

とコンポーネントのページで:

{{getPersonDepart(personDeptId)}} 

、それは常に500エラーを返す

なにか提案を?


更新1: エラーが発生しました。私はコンポーネントプロバイダーのサービスについて言及しなければならなかった。私は今apiが正しい応答を返すことがわかります。しかし、それは無限ループ(メソッドをノンストップと呼んでいます!)に行き、私はなぜそれがわかりません。何か案が?

+0

500は内部サーバーエラーを意味します。あなたのコントローラからデビューすることはできますか?私はangular4クライアントとasp.netのWeb APIのバックエンドを使用し、クライアントのためにtypescriptクライアントを生成するswashbuckleを使用する – Andre

+0

私はAPIのURLに行くとき、それは正しい応答を返しますが、私はコンポーネントページ内でそれを使用するとき、 – iAziz

+0

コントローラ機能にブレークポイントを設定します。コードが – Andre

答えて

0

「経路」には「api」が含まれているかどうかを確認します。例えば

[Route("api/[controller]")] 
public class SampleDataController : Controller 
{ 
    [HttpGet("[action]")] 
    public IEnumerable<WeatherForecast> WeatherForecasts(){..} 
} 
+0

Angularコンポーネントの問題です。 apiメソッドを呼び出すと正常に動作します。 – iAziz

3

無限ループは、おそらくこれが原因です:

{{getPersonDepart(personDeptId)}} 

あなたはそれがコンポーネントを描画する際getPersonDepartを呼び出すために角度を求めています。これが完了すると、Angularはコンポーネントをもう一度レンダリングし、Angularは再びを実行し、レンダリングの再開などを引き起こします。

+0

意味があります。しかし、それを修正する方法は?なにか提案を? – iAziz

+0

私は新しい質問[リンク]を作成しました(https://stackoverflow.com/questions/46587847/infinite-loop-within-angular-component) – iAziz

関連する問題