je le poste jQuery suivant un ASP.NET webmethod:jQuery après AJAX reçoit 405 erreur (verbe HTTP POST non autorisé)
$.ajax({
type: "POST",
url: "AjaxWebMethods.aspx/UpdNote",
contentType: "application/json; charset=utf-8",
data: "{'ID' : '" + id + "', 'note' : '" + note + "' }",
dataType: "json",
success: UpdNote_Success,
error: AjaxError
});
Et la méthode Web est déclarée:
[System.Web.Services.WebMethod(enableSession: true)]
public static int UpdNote(int ID, string note) {
// business logic that eventually returns a number, but simplifying
// ... for the sake of brevity
int retNum = 99;
return retNum;
}
La publication jQuery et la méthode Web fonctionnent toutes les deux dans un environnement Windows authentifié (les utilisateurs sont authentifiés par LDAP). Cependant, j'ai récemment dû déplacer le site vers un serveur qui utilise RSA (authentification à deux facteurs, code PIN et jeton) pour authentifier les utilisateurs afin d'accéder au site. Et ce que je vois maintenant, c'est que tous mes messages jQuery retournent "405 error".
demandes Cross site vient à l'esprit, évidemment, mais rien de tout cela se passe ici. Tous les messages jQuery AJAX utilisent des méthodes Web déclarées dans AjaxWebMethods.aspx, qui se trouve dans le propre domaine du site.
Merci d'avance pour toute aide ou suggestion!
EDIT:
En utilisant Fiddler IE8 me donne un peu plus d'informations. Le code d'erreur renvoyé est toujours 405, mais l'erreur du serveur est plus descriptive. L'erreur du serveur est "Le verbe HTTP POST utilisé pour accéder au chemin" /AjaxWebMethods.aspx/UpdNote "n'est pas autorisé."
J'ai essayé de changer le paramètre de type de la requête ajax en GET, mais j'obtiens un 404 à la place (la ressource est introuvable).
En outre, oublié de mentionner que c'est sur SSL (bien que je ne pense pas que ce serait faire une différence).
EDIT:
Après des tests approfondis (et l'aide précieuse de membres astucieux de stackoverflow) J'ai déterminé que 405 erreur est liée directement à la piscine demande que le site utilise, et plus particulièrement le mode Pipeline géré sélectionné pour le pool d'applications. Si j'utilise un pool d'applications qui cible v4.0 (.NET Framework) et Integrated (mode Pipeline géré), mon post AJAX fonctionne correctement. Mais si j'utilise un pool d'applications qui cible les versions 4.0 et Classic (mode pipeline géré), j'obtiens l'erreur 405.
Donc, à ce stade, je suis toujours à la recherche d'une solution à cette question, même si je suis en mesure de la maison dans le problème.
Pourquoi avez-vous besoin de la déclaration 'contentType'? vous définissez le paramètre 'datatType' sur JSON et *" Les données seront toujours transmises au serveur à l'aide du jeu de caractères UTF-8, vous devez le décoder correctement côté serveur. "* Cette partie est également inutile - [API jQuery] (http://api.jquery.com/jQuery.ajax/) –
Pourquoi n'utilisez-vous pas l'URL complète? (sauf si vous venez de l'enlever pour des raisons de sécurité) – gabeio