web-dev-qa-db-fra.com

Quand la sensibilité à la casse est-elle importante dans les requêtes JSON aux services Web ASP.NET (ASMX)?

J'ai fait les tests suivants avec des requêtes JSON envoyées à un service Web ASP.NET 2.0 ASMX (en utilisant AJAX Extensions 1.0 pour ASP.NET 2.0) et il semble que la casse soit importante dans certains mais pas dans d'autres. Voir les exemples suivants:

  • Le cas correspond à 100%:

    {"request":{"Address":{"Address1":"123 Main Street","Address2":"suite 20","City":"New York","State":"NY","Zip":"10000","AddressClassification":null}}}
    

    Résultat: HTTP/1.1 200 OK

  • La casse du nom de l'objet contenu Address ne correspond pas:

    {"request":{"address":{"Address1":"123 Main Street","Address2":"suite 20","City":"New York","State":"NY","Zip":"10000","AddressClassification":null}}}
    

    Résultat: HTTP/1.1 200 OK

  • La casse du paramètre de service Web request ne correspond pas:

    {"Request":{"address":{"Address1":"123 Main Street","Address2":"suite 20","City":"New York","State":"NY","Zip":"10000","AddressClassification":null}}}
    

    Résultat: HTTP/1.1 500 Internal Server Error

(Note rapide: Le fait que la classe Request et le paramètre request partagent le même nom n'est pas pertinent. Même si je change le nom du paramètre en lrequest , la sensibilité à la casse est toujours requise.)

Quand la sensibilité à la casse dans les demandes de service Web JSON est-elle importante? Est-ce également un problème général de service Web ou est-ce spécifique à ASP.NET AJAX?


Informations supplémentaires:

J'utilise les extensions AJAX 1.0 pour ASP.NET 2.0, donc cela peut avoir été résolu dans les versions ultérieures du framework. Si oui, faites-le moi savoir.

Après avoir suivi les réponses dans ma dernière question concernant le formatage des chaînes JSON , j'ai réalisé que la raison pour laquelle ma demande échouait n'était pas à cause d'un JSON invalide (grâce à TJ Crowder = pour l'avoir signalé et lié à http://www.jsonlint.com/ pour la validation JSON). Au contraire, après avoir fait plus de tests, j'ai appris que le problème était dû au fait que le service Web ne comprenait pas la façon dont mon objet JSON était formaté et j'ai découvert que le service Web était très difficile en ce qui concerne la casse . Il semble que parfois la sensibilité à la casse soit importante, tandis que d'autres fois elle ne l'est pas (voir les exemples ci-dessus).

Voici à quoi ressemble mon code C # pour la méthode et les classes Web:

[WebMethod]
public Response ValidateAddress(Request request)
{
    return new test_AddressValidation().GenerateResponse(
        test_AddressValidation.ResponseType.Ambiguous);
}

...

public class Request
{
    public Address Address;
}

public class Address
{
    public string Address1;
    public string Address2;
    public string City;
    public string State;
    public string Zip;
    public AddressClassification AddressClassification;
}

public class AddressClassification
{
    public int Code;
    public string Description;
}
23
Ben McCormack

Selon spécification JSON-RPC , la réponse est toujours.

9.0 Respect de la casse des noms de procédure et de paramètre

Les implémentations conformes DOIVENT traiter les noms de procédure et de paramètre comme étant sensibles à la casse, de sorte que la barre de noms et la BAR seraient considérées comme deux entités distinctes.

Donc, il semble que les situations où cela a fonctionné pour vous étaient les exceptions, pas les cas où elles ne l'ont pas été. Il y a de fortes chances que quelqu'un d'un côté ou de l'autre de l'équation n'adhère tout simplement pas aux spécifications.

53
Serapth