0

asp.net mvc4 サイトの WebAPI に問題があります。エラー メッセージは次のとおりです。

ローカル名 '__type' の属性を書き込んだ後、属性 'type' = 'object' を記述する必要があります。

スタックは次のとおりです。

at System.Web.Http.WebHost.HttpControllerHandler.EndProcessRequest(IAsyncResult result)
at System.Web.Http.WebHost.HttpControllerHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

私のメソッドはオブジェクトリスト IEnumerable を返します。製品は datacontract シリアライズ可能で問題ありません

アプリケーションがリサイクルされたときに、グローバルエラーハンドラーを介してこのエラーを回復しました。

4

1 に答える 1

0

ここでの提案を試しましたか? それらはすべてシリアライゼーションに関連しているように見えます(virtualキーワードを使用しない、既知のタイプを指定するなど)。

いくつかの理由から、DBコンテキストから直接エンティティを使用し、それらをある種の応答モデルに変換しないという、投稿の人々が説明していることを実際に実行しないことをお勧めします。

  • エンティティが変更された場合、WebAPI のコンシューマとの契約が破られた可能性があります
  • コンテキストから取得した後に値のいずれかを変換したい場合は、コントローラーでそれを行うことを余儀なくされます。これは、 i* tがコントローラーにマッピングと変換の追加の責任を与えるためですこれ)
  • 最初の 2 つのポイントの組み合わせのようなものとして、永続化モデルの懸念を「ビュー」(またはこの場合はコントラクト) の懸念と結び付けました (つまり、コントラクトを気にせずにエンティティを自由に変更することはできません。およびその逆)

コードを表示せずにこれらのことを行っているかどうかはわかりませんが、ApiController で使用しようとしているモデルを可能な限りPOCO -y にすることが役立つ場合があります。

于 2012-05-02T18:48:42.520 に答える