2011-12-05 59 views
3

將問題保持簡短和甜美。我嘗試將JSON對象傳遞給ASMX Web服務時遇到500錯誤。需要注意的是,如果我聲明PARAMS作爲單個變量(如:int ID, int OrderHeaderID等)我沒有收到錯誤。我看不出爲什麼會發生問題,我已經成功地以這種方式傳遞了對象,可能有不同的語法,但我不記得。500錯誤 - JSON對象POST .ASMX webservice

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"} 

響應頭:

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:

只好包裹JSON對象,以便它在服務器上確認:

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

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

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

回答

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「:」「, 「:」 「},{」 ReturnHeaderID 「:5」,SKU 「:467662」,ReasonCode 「:1,」 數量 「:1,」 註釋1 「:」 「 」註釋2「: 」「, 」將comment3「:」 「}]}'功能:'公共對象SaveReturnDetails(List ReturnDetails)' – Terry

+0

PS。如果你知道這個問題,我可以提出一個新的問題,這樣你就可以得到一個完整答案。 – Terry