2012-11-19 69 views
1

我有一個WCF RESTful服務,並試圖勾畫出我將如何處理服務器和各種客戶端上的錯誤。該服務將可以從網絡(jQuery)和iOS產品訪問。下面來看看我是如何上的服務引發錯誤:WCF REST服務和iOS錯誤處理與NSError

[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); 
      } 
     }); 
     }); 

...一切的偉大工程 - 呼叫並且引發錯誤(因爲我沒有提供任何身份驗證)並且調用了錯誤:callback。在我檢查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屬性,但無法弄清楚我是否可以獲取自定義信息,如果可以,我該如何去做。

在此先感謝您的幫助。

回答

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 
} 
+0

是的只是檢查和可以肯定的是。非常感謝...我欣賞它。 –