MVC 4 Web API フレームワークを使用して取り組んでいる Web API があります。例外がある場合は、現在新しい HttpResponseException をスローしています。すなわち:
if (!Int32.TryParse(id, out userId))
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid id"));
これは、単純なオブジェクトをクライアントに返します。{"message":"Invalid id"}
より詳細なオブジェクトを返すことで、例外に対するこの応答をさらに制御したいと考えています。何かのようなもの
{
"status":-1,
"substatus":3,
"message":"Could not find user"
}
どうすればこれを行うことができますか?エラー オブジェクトをシリアル化し、応答メッセージに設定する最良の方法はありますか?
私も少し調べて、ModelStateDictionary
このちょっとした「ハック」を思いつきましたが、まだきれいな出力ではありません:
var msd = new ModelStateDictionary();
msd.AddModelError("status", "-1");
msd.AddModelError("substatus", "3");
msd.AddModelError("message", "invalid stuff");
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, msd));
編集
はカスタムのように見えHttpError
ます。これは、私のビジネスレイヤーから拡張可能にするために、トリックを行うようです...
var error = new HttpError("invalid stuff") {{"status", -1}, {"substatus", 3}};
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, error));