このブログ投稿によると、次のように、クライアントに有用な情報を提供する ApiController でエラー応答を作成できます。
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, String.Format("Contact {0} not found.", id)));
...そして、クライアントはエラーの詳細を含む「オブジェクト」を (この例では) 404 ステータスとともに受け取ります。
{
"Message": "Contact 22 not found.",
"MessageDetail": "<other info - not always present>"
}
(この例では適切ではないと思うMessageDetail
ので、おそらく含まれませんが、他の状況では含まれる可能性があります - ブログ投稿を参照してください)。
すばらしいように聞こえますが、私の C# クライアント側アプリケーションはこれをクライアント側でどのように使用する必要がありますか? リクエストを行いました。応答として JSON でエンコードされContact
たオブジェクトを期待していましたが、代わりに別の種類のオブジェクトを受け取りました。
Contact
応答コードが失敗を示していたので、オブジェクトを予期せず、代わりにこのエラー オブジェクトを探すことがわかっていると思います。しかし、すべてのエラーがこれらのいずれかを返すわけではなく、MessageDetail
メンバーが存在する場合と存在しない場合があることを考えると、応答を解析するにはどうすればよいでしょうか? (注: 私のシナリオでは、JSON エンコードされ、クライアント側で JSON.NET を使用しています)。
オブジェクトがよく知られている型である場合は、 を使用できJsonConvert.DeserializeObject<T>()
ますが、定義済みの型はないと思います。また、独自のクラスを作成する場合、オプションのMessageDetail
メンバーはどうすればよいでしょうか?
私は JSON の処理にあまり詳しくないので、JSON の処理に慣れている人には明らかかもしれません。