2011-12-05 2 views
3

여기에 짧고 달콤한 질문을 유지하십시오. JSON 객체를 ASMX 웹 서비스에 전달하려고하면 500 오류가 발생합니다. 내가 개별 변수 (예. int ID, int OrderHeaderID 등)로 PARAMS를 선언하는 경우 나 오류가 나타나지 않습니다. 왜 문제가 발생하는지 알 수는 없지만 이전에이 구문을 사용하여 객체를 성공적으로 전달했습니다. 구문은 다를 수 있지만 기억할 수는 없습니다.500 오류 - .ASMX 웹 서비스에 대한 JSON 객체 POST

JS :

var returnHeader = { 
    ID: -1, 
    OrderHeaderID: parseInt(getQueryStringKey('OrderID')), 
    StatusID: 1, 
    DeliveryCharge: 0, 
    CreatedBy: $('span[id$="lblHidUsername"]').text(), 
    ApprovedBy: $('span[id$="lblHidUsername"]').text() 
}; 

$.ajax({ 
    type: "POST", 
    url: 'Order.asmx/SaveReturnHeader', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    data: JSON.stringify(returnHeader), 
    success: function (result) { 
     if (result.Status == 'OK') { 
      GetReturns(); 
     } 
     else { 
      $('#divMessage').show().html(result.Data.Message).addClass('error'); 
     } 
    }, 
    error: function (x, e) { 
     if (x.status == 500) { 
      $('#divMessage').show().html('An unexpected server error has occurred, please contact support').addClass('error'); 
     } 
    } 
}); 

서버 (편의상 약칭)

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public object SaveReturnHeader(BEReturnHeader returnHeader) 
{ 
    try 
    { 
     return new 
     { 
      Status = "OK", 
      Data = "" 
     };     
    } 
    catch (Exception ex) 
    { 
     return new 
     { 
      Status = "ERROR", 
      Data = ex 
     }; 
    } 
} 

대상 :

public int ID ... 
public int OrderHeaderID ... 
public int StatusID ... 
public decimal DeliveryCharge ... 
public string CreatedBy ... 
public string ApprovedBy ... 

요청 데이터 :

{"ID":-1,"OrderHeaderID":5,"StatusID":1,"DeliveryCharge":0,"CreatedBy":"77777777","ApprovedBy":"77777777"} 
,451,515,

응답 헤더 :

HTTP/1.1 500 Internal Server Error 
Date: Mon, 05 Dec 2011 16:38:36 GMT 
Server: Microsoft-IIS/6.0 
X-Powered-By: ASP.NET 
X-AspNet-Version: 2.0.50727 
jsonerror: true 
Cache-Control: private 
Content-Type: application/json 
Content-Length: 91 

응답 데이터 :

{"Message":"There was an error processing the request.","StackTrace":"","ExceptionType":""} 

FIX :

var params = { 
      returnHeader: { 
       ... 
      } 
     }; 

... 
data: JSON.stringify(params), 
... 

{"returnHeader":{"ID":-1,"OrderHeaderID":5,"StatusID":1,"DeliveryCharge":0,"CreatedBy":"77777777","ApprovedBy":"77777777"}} 
:이 서버에서 인식 그래서

는 JSON 객체를 포장했다

답변

5

전체 개체 컨테이너가 아니라 개체의 속성 만 전달합니다. 따라서 웹 메소드는 다음과 같이 예상합니다.

{returnHeader:{"ID":-1,"OrderHeaderID":5,"StatusID":1,"DeliveryCharge":0,"CreatedBy":"77777777","ApprovedBy":"77777777"}} 
+0

문제가있었습니다. 절름발이, 나는 단 하나의 물체가 지나가고 있다는 것을 깨닫기에 충분히 똑똑하다고 생각했다. 스코트 감사합니다. .NET 2.0에서 작동하는 즐거움 ... – Terry

+0

ScottE : 배열에 같은 문제가 생겼지 만 올바르게 이름을지었습니다. DATA :'{ "ReturnDetails": [{ "ReturnHeaderID": 5, "SKU": 537258, "ReasonCode": 1, "Quantity": 1, "Comment1": "", "Comment2": "", "Comment3 1, "Comment1": "", "Comment2": "", "Comment3": "": ""}, { "ReturnHeaderID": 5, "SKU": 467662, "ReasonCode" "}]}'Function :'public 객체 SaveReturnDetails (List ReturnDetails)' – Terry

+0

PS. 문제를 안다면 나는 새로운 질문을 할 수있어 완전한 대답을 얻을 수 있습니다. – Terry

관련 문제