1

私は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プロパティを見てきましたが、カスタム情報を取得できるかどうか、取得できる場合はどのように実行するかがわかりません。

助けてくれてありがとう。

4

1 に答える 1

1

エラーメッセージは、リクエスト(レスポンスボディ)から返されたデータに表示されます。

//make the request
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

if (error) {
    if (data) {
        NSString *respBody = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    } else {
        NSLog(@"%@", error.description);
    }
}
else 
{
    // get response
}
于 2012-11-19T20:56:53.657 に答える