私はWCFRESTfulサービスを使用しており、サーバーとさまざまなクライアントでエラーを処理する方法をスケッチしようとしています。このサービスには、Web(jQuery)製品とiOS製品の両方からアクセスできます。これは、サービスでエラーをスローする方法を示しています。
[WebGet(UriTemplate = "get/{id}", ResponseFormat = WebMessageFormat.Json)]
public Person Get(string id)
{
//check security
if(!SecurityHelper.IsAuthenticated()) { throw new WebFaultException<PersonException>(new PersonException { Reason = "Permission denied." }, HttpStatusCode.Unauthorized); }
jQueryを使用して、次のようにサービスを呼び出すことができます。
$.ajax({
type: "GET",
dataType: "json",
url: "/person/get/123",
success: function(data) {
alert('success');
},
error: function(xhr, status, error) {
alert("AJAX Error!");
alert(xhr.responseText);
}
});
});
...そしてすべてがうまく機能します-呼び出しが行われ、エラーがスローされ(認証を提供していないため)、エラー:コールバックが呼び出されます。xhr.responseTextを調べると、エラーコールバックで、サーバーから提供されたエラー理由を示す正しいJSONオブジェクト({"reason": "Permission denied!"})が取得されます。
今-私はiOSアプリをまとめて同じサービスを呼び出そうとしていますが、サービスによって提供されたエラーの詳細を取得できないことを除いて、そこからもすべてがうまく機能しています。iOSからRESTサービスを呼び出すときに使用するコードは次のとおりです。
//set up for any errors
NSError *error = nil;
//set up response
NSURLResponse *response = [[NSURLResponse alloc] init];
//make the request
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//check for error
if(error)
{
//debug
NSLog(error.description);
//send back error
return error;
}
else
{
error.descriptionに、「操作を完了できませんでした」などの一般的なメッセージのみが表示されます。
サーバーから送信されたカスタムエラー情報を取得するにはどうすればよいですか?NSErrorクラスのuserInfoプロパティを見てきましたが、カスタム情報を取得できるかどうか、取得できる場合はどのように実行するかがわかりません。
助けてくれてありがとう。