概要:
WCF REST サービスで、独自のカスタム エラー応答を使用して正しくない入力パラメーターを処理するにはどうすればよいですか?
詳細:
WCF REST サービスに次のインターフェイス メソッドがあります。
[OperationContract]
[WebGet(UriTemplate = "getitem?id={itemId}", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
[FaultContract(typeof(DataModel.Fault))]
DataModel.Item GetItem(int itemId);
GetItem メソッドの実装内で、エラー条件 (つまり、アイテムが存在しない) をキャッチし、WebFaultException を作成します。これは何の問題もなく動作します。
ただし、呼び出し元のクライアントが次の URL を呼び出すとします。
http://myserver.com/itemservice/getitem?id=abc
つまり、id の入力値は、GetItem メソッドで要求されるように int にキャストできません。
DataModel.Fault
指定された id 値は int にキャストできないため、この呼び出しは正しく失敗しますが、コードが実行される前にこの失敗が発生するため、インターフェイス メソッドに割り当てられた FaultContract に従ってオブジェクトを返すことができません。
問題は、高レベルのエラー ハンドラーをフックして、このタイプのエラーをキャッチし、その後、WCF が生成する HTML エラーではなく、独自のフォールト構造を返すにはどうすればよいかということです。
リクエスト エラー サーバーでリクエストの処理中にエラーが発生しました。詳細については、サーバー ログを参照してください。
同じ質問の続きとして、クライアントが次のように呼び出した場合も同じことができるようにしたいと思います。
http://myserver.com/itemservice/gettitem?id=abc
URI のタイプミスに注意してください。getitem ではなく getitem (2 つの t)