400 Bad Request de la Réponse HTTP à l'aide d'un WCF POST via JQuery
Du mal à obtenir mon JQuery POST pour être accepté par le Service WCF. Voici le POST de l'javascript:
function jqueryPost() {
var url = "/LoggingTest";
$.post(url, { message: "test message" });
}
C'est de cette façon que je suis en acceptant le POSTE, via une Interface:
[OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "/LoggingTest",
BodyStyle = WebMessageBodyStyle.Bare)]
void LoggingTest(string message);
Et la mise en œuvre:
public void LoggingTest(string message)
{
log.Debug(message, null);
}
Lorsque j'appelle la fonction jqueryPost je vois dans l'inspecteur web HTTP de la réponse de 400 Bad Request. Vous ne savez pas comment obtenir le POSTE demande de travail.
(Ajouté le 7/1)
@James, voici le résultat de l'inspecteur web:
http://localhost:4252/LoggingTest
HTTP Information
La Méthode de requête:POST
Code D'État:400 Bad Request
En-Têtes De Requête
Accepter:/
Cache-Control:max-age=0
Content-Type:application/x-www-form-urlencoded
Origine:http://localhost:4252
Referer:http://localhost:4252/
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; C) AppleWebKit/passant de 532,4 (KHTML, like Gecko) de l'intervalle Qt/4.6.2 Safari/passant de 532,4
X-Requested-With:XMLHttpRequest
Les Données De Formulaire
message:message de test
En-Têtes De Réponse
Content-Length:1165
Content-Type:text/html
Date:Thu, 01 Jul 2010 18:56:15 GMT
Server:Microsoft-HTTPAPI/1.0
James, j'ai posté l'inspecteur web de la sortie ci-dessus.
OriginalL'auteur ThoughtCrhyme | 2010-06-30
Vous devez vous connecter pour publier un commentaire.
Donc, j'ai juste fini de faire cela, Interface:
Mise en œuvre:
Et maintenant ça fonctionne. Doit avoir quelque chose à voir avec les paramètres passés dans la UriTemplate, parce que quand je l'ai changé pour passer les paramètres comme suit:
il a commencé à accepter le POSTE.
Modifier 7/7: Voici la dernière JavaScript aussi:
Je vais le poster quand je rentre dans le bureau le mardi, merci pour l'intérêt que si la Marque.
Est-ce une façon de passer une chaîne de valeur sans la uritemplate, au sein du corps post?
Ce n'est pas une bonne solution. Cela va à l'encontre de l'objectif de la POSTE. Pourrait tout aussi bien utiliser GET. Quelqu'un sait d'une meilleure solution? Je ne veux pas les paramètres de la requête
OriginalL'auteur ThoughtCrhyme
Essayez d'ajouter la ligne suivante sur le contrat de service, aussi je pense que vous devriez utiliser WrappedRequest place de Nu
regarder dans cette post pour plus de décorations
Quelle configuration que vous utilisez, pouvez vous s'il vous plaît coller configuraiton ici? avez-vous vérifié les post que j'ai donné pour référence?
Je ne suis pas à l'aide de IIS, donc il n'est pas .config
OriginalL'auteur IBhadelia
Il pourrait être qu'une partie du casse-tête pour le faire fonctionner pour vous, mais cela m'a quelque temps:
Vous pouvez avoir besoin de vérifier votre syntaxe JSON, je pense qu'elle doit être le double de chaînes entre guillemets autour de la variable et le nom de la variable.
par exemple
doit être:
n.b. guillemets doubles "message"
EDIT: Merci pour les commentaires ci-dessous, voici quelques liens qui pourraient s'avérer utiles pour la mise en forme de JSON:
Salut @Matti Virkkunen, je vois où votre provenance...... Je suis d'accord JavaScript lui-même EST plus "clémente", mais JSON, l'échange de données au format (c'est à dire ne nécessitant pas de JavaScript) est de plus en plus strictes. http://www.JSON.org suggère l'utilisation de guillemets doubles. Mais pour être honnête, je ne peux pas trouver un bon lien pour le ECMAScript 5 du projet de travail pour des informations officielles, mais developer.yahoo.com/yui/json (Sur le format JSON) est assez autoritaire. Rappelez-vous que la syntaxe JSON n'est pas le JavaScript per-dire (n'oubliez pas que JSON peut être utilisé avec javascript), c'est juste un format basé sur / inspiré par un sous-ensemble de javacript.
Virkkunen, après Avoir dit tout ce qui précède, il est vrai que vous pouvez probablement vous en sortir avec pas utiliser des guillemets doubles pour valeur / paires de chaînes. Les exemples sur jquery.post documentation ne les avez pas. Et, en fait, le jquery.post documentation n'est même pas nécessaire d'utiliser JSON. Mais de toute façon, je ne pense pas qu'il mérite un -1, surtout que le c# sur le côté serveur nécessite le double guillemets. stackoverflow.com/questions/4939620/... Si j'ai aidé à clarifier les choses, n'hésitez pas à amened votre -1, si ce n'est pas de soucis.
Suis tombé sur ce, developer.mozilla.org/en/JavaScript/Reference/Global_Objects/... et le fait de me souvenir de ce post, il est l'un des meilleurs JSON descriptions, je suis venu à travers.
Le point de mon commentaire était que votre extrait de code a rien à voir avec le JSON que ce soit. L'objet, il est juste de passage chaîne de paires clé/valeur jQuery comme un simple objet JavaScript, qui va les envoyer en tant que POSTE distinct des champs, pas de JSON. Revendiquant les plus strictes règles d'analyse de JSON ont tout intérêt ici c'est tout simplement faux. Pour le rendre encore plus clair: cela ne va pas envoyer "{\"message\": \"message\"}" sur le serveur, il va envoyer le message "=test%20message".
OriginalL'auteur Alex KeySmith