4 Stimmen

500 Fehler - JSON Objekt POST an .ASMX Webservice

Halten Sie die Frage kurz und bündig. Ich bekomme einen 500-Fehler, wenn ich versuche und übergeben Sie ein JSON-Objekt zu einem ASMX-Webservice. Beachten Sie, dass wenn ich die Parameter als einzelne Variablen deklarieren (z.B.. int ID, int OrderHeaderID , usw.) Ich erhalte nicht die Fehlermeldung . Ich kann nicht sehen, warum das Problem auftritt, ich habe erfolgreich Objekte auf diese Weise vor, möglicherweise mit anderen Syntax übergeben, aber ich kann mich nicht erinnern.

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

Server:

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

Objekt (der Einfachheit halber abgekürzt):

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

Daten anfordern:

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

Antwort-Kopfzeilen:

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

Antwortdaten:

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

FIX:

Ich musste das JSON-Objekt einpacken, damit es auf dem Server erkannt wurde:

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

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

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

6voto

ScottE Punkte 21245

Sie übergeben nur die Eigenschaften des Objekts, nicht den gesamten Objektcontainer. Die Web-Methode erwartet also stattdessen etwas wie dies:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X