2016-11-30 11 views
0

私には2つのプロジェクト、フロントエンド(AngularJS)とバックエンド(C#Web-Api)があります。問題は、フロントエンドがapiをクエリすると(たとえば、GET localhost/api/Especialistas?rol = XXXX)、私は500エラーが発生します。 APIコードは次のとおりです。WebApi内部サーバーエラー

public IHttpActionResult GetEspecialista(string rol) 
{ 
    Especialista especialista = db.Especialistas.First(e=> e.Rol == rol); 
    if (especialista == null) 
    { 
     return NotFound(); 
    } 
    return Ok(especialista); 
} 

APIは、return Ok(especialista)に達しているため、動作しています。

フロントエンドは、ネットワークコンソールが要求200 OK OPTIONを示しているが、500 Internal Server Error GET API

Restangular.one("Especialistas?rol=XXXX").get() 

を照会するために、このRestangularを使用しています。

WebApiConfig.csファイルでメッセージハンドラを試して、GETリクエストがApiに届いているかどうかを確認しましたが、本当に届いていますので、設定ファイルを変更しなかったため何が起こったのかわかりません。

どのようにこの問題を解決するための手掛かりがありがとう、感謝します。

答えて

1

アクションが正常に呼び出されたにもかかわらず500エラーが発生した場合は、HTTP応答に変換したときにespecialistaオブジェクトのシリアル化によってエラーが生成されたと考えられます。

ほとんどの場合、オブジェクトグラフ内のクリエートサイクルのナビゲーションプロパティのためにシリアル化が失敗する可能性があります。エンティティフレームワークモデルではなく、単純なオブジェクトを返すことをお勧めします。

次のことを試してみてください。

var retObj = new { Prop1 = especialista.Prop1, Prop2 = especialista.Prop2 }; 
return Ok(retObj); 

上記のコードが動作する場合、私はあなたのデータモデルに基づいて取り込まれるべきサービスモデル「ミラー」オブジェクトを作成示唆しています。これらのオブジェクトは、データモデルの代わりに返される必要があります。

プロパティ値の割り当ての定型記号を避けるための優れたヘルパーはAutomapperです。

+0

これは、ありがとう! – CamiloR