Erreur 500 - objet JSON POST .ASMX webservice
Garder la question ici, à court et doux. J'obtiens une erreur 500 quand je l'ai essayer et passer un objet JSON pour une ASMX webservice. Notez que si je déclarer les paramètres comme des variables individuelles (eg. int ID, int OrderHeaderID
, etc) je ne reçois pas l'erreur. Je ne vois pas pourquoi il y a un problème, j'ai passé avec succès les objets de cette manière avant, éventuellement avec une syntaxe différente, mais je ne me souviens pas.
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');
}
}
});
Serveur:
[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
};
}
}
Objet (en abrégé pour des raisons de simplicité):
public int ID ...
public int OrderHeaderID ...
public int StatusID ...
public decimal DeliveryCharge ...
public string CreatedBy ...
public string ApprovedBy ...
Demande De Données:
{"ID":-1,"OrderHeaderID":5,"StatusID":1,"DeliveryCharge":0,"CreatedBy":"77777777","ApprovedBy":"77777777"}
En-Têtes De Réponse:
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
Données De Réponse:
{"Message":"There was an error processing the request.","StackTrace":"","ExceptionType":""}
CORRECTIF:
Avait pour envelopper l'objet JSON, donc il a été reconnu sur le serveur:
var params = {
returnHeader: {
...
}
};
...
data: JSON.stringify(params),
...
{"returnHeader":{"ID":-1,"OrderHeaderID":5,"StatusID":1,"DeliveryCharge":0,"CreatedBy":"77777777","ApprovedBy":"77777777"}}
OriginalL'auteur Terry | 2011-12-05
Vous devez vous connecter pour publier un commentaire.
Vous êtes seulement de passage dans les propriétés de l'objet, et non pas la totalité de l'objet conteneur. Donc, la méthode web s'attend à quelque chose comme ceci à la place:
ScottE: avoir le même problème avec un tableau mais j'ai nommé correctement, des idées? DONNÉES:
{"ReturnDetails":[{"ReturnHeaderID":5,"SKU":537258,"ReasonCode":1,"Quantity":1,"Comment1":"","Comment2":"","Comment3":""},{"ReturnHeaderID":5,"SKU":467662,"ReasonCode":1,"Quantity":1,"Comment1":"","Comment2":"","Comment3":""}]}
Fonction:public object SaveReturnDetails(List<BEReturnDetail> ReturnDetails)
PS. Si vous connaissez le problème, je peux faire une nouvelle question afin de vous obtenir un crédit pour une réponse complète.
ReturnHeaderID doit être juste l'ID, selon votre définition de l'objet. Aussi, il semble que vous avez quelques champs supplémentaires là-dedans?
Nah ce sont
ReturnDetail
des objets, pasReturnHeader
. Désolé je sais que c'est un peu déroutant. Cela étant dit, dans l'intervalle, j'ai compris, il y avait une pièce de théâtre de côté de serveur de code d'erreur qui n'a pas été jetés, même si je suis d'intercepter les exceptions et les renvoyer avec autant de succès les objets. Finalement, il n'y avait rien de mal avec ma syntaxe. Merci pour regarder encore une fois, désolé pour perdre votre temps.OriginalL'auteur ScottE