나는 내 iOS 앱에 다음 스위프트 코드를 가지고 :NSURLSession에서 500 오류의 응답 데이터는 어디에 있습니까?
session?.dataTaskWithRequest(urlRequest, completionHandler: { (data, response, error) -> Void in
if let httpResponse = response as? NSHTTPURLResponse {
var dataString:String?
if data != nil {
// Print the response as a string
dataString = String(data: data!, encoding: NSUTF8StringEncoding)!
if RequestManager.verbose { print("Response data: \(dataString)") }
} else {
if RequestManager.verbose { print("Response data: \(response?.description)") }
}
//[...]
웹 서비스 API에 대한 호출은 성공이 잘 작동 할 때 : response!.statusCode
올바르게 설정하고 완료 핸들러에 전달 된 data
이로 해석 될 수있다 JSON의 유용한 객체.
그러나 서버 응답이 오류 인 경우 (예 : 500이면, data
은 0 바이트이며, 볼 수있는 것은 응답의 본문이 아니라 헤더 정보입니다. 여기
HTTP/1.1 500
전송 인코딩이 내부 서버 오류 : 마이크로 소프트 IIS/8.0
:
서버를 청크 X-구동 - 기준 : ASP.NET
설정 쿠키 : ARRAffinity = 00000000000000000000888888888888888888888888aaaaaaaaaaaaaaaaaaaa; 경로 = /; 도메인 = blah-testing.azurewebsites.net
날짜 : 2016년 7월 21일 (목) 그리니치 표준시 05시 57분 44초D : \ Users \ timregan \ Source \ Repos의 Blah.Controllers.CustomersController.Get()에서 "Exception", "예외", "메시지": "사용자의 Nelly에 없음", "StackTrace" Microsoft.AspNetCore.Mvc.Internal.ObjectMethodExecutor.Execute (Object target, Object [])에서 lambda_method (Closure, Object, Object [])에서 줄을 \ 37 \ r \ n 줄을 \ ServerSideCode \ Blah \ ApiControllers \ CustomersController.cs : ] 매개 변수) \ r \ n Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__28.MoveNext() \ r \ n --- 예외가 발생한 이전 위치의 스택 추적 끝 - 시스템의 \ r \ n .Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() \ r \ n Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__18.MoveNext() \ r \ n --- 예외가 발생한 이전 위치에서 스택 추적 끝 - - \ r \ n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (작업 작업) \ r \ n System.Runtime.Compiler에서 Services.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (작업 작업) \ System \ Runtime.CompilerServices.TaskAwaiter.GetResult() \ r \ n Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext() \ r \ n --- 예외가 발생한 이전 위치의 스택 추적 끝 - System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (작업 작업) \ System \ Run \ System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (작업 작업)에서 \ r \ Microsoft.AspNetCore.Authentication.AuthenticationMiddleware의 System.Runtime.CompilerServices.TaskAwaiter.GetResult() \ r \ n에서
1.<Invoke>d__18.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware
1.d__18.MoveNext() \ r \ n --- 이전 위치에서 스택 추적 끝내기 예외가 Throw 된 곳 - System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task task) \ r \ n System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task) \ blame에서 \ r \ n. 시작. <> c. < b__6_0> D의 d.MoveNext() : \ 사용자 \ timregan \ 소스 \ 레포 \ ServerSideCode \ ㅋ \ Startup.cs : 라인 (59) ","상태 코드 "
하지만 엑스 코드 500} 동일한 응답 가 훨씬 적습니다. 헤더 요소는 모두 NSHTTPURLResponse
개체에 있지만 완료 핸들러 dataTaskWithRequest
의 다른 매개 변수는 아무 것도 없습니다. data
은 0 바이트이고 error
은 nil
입니다. 서버 오류 스택 추적이있는 응답 본문이있는 곳 Swift에서 어떻게 액세스 할 수 있습니까?
내 질문이 왜 투표에 실패했는지 알면 도움이 될 것입니다. 나는 분명한 함정에 빠졌다고 생각하지 않습니다. 아마도 iOS 태그가 너무 일반적 일 것입니다. – dumbledad