Une publication jQuery AJAX reçoit une erreur 405 (le verbe HTTP n’est pas autorisé)

J’ai le message jQuery suivant sur une méthode Web ASP.NET:

$.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, ssortingng 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 parfaitement dans un environnement authentifié Windows (les utilisateurs sont authentifiés par LDAP). Cependant, j’ai récemment dû déplacer le site Web sur un serveur qui utilise RSA (authentification à deux facteurs, code PIN et code à jeton) pour authentifier les utilisateurs afin d’accéder au site. Et ce que je constate à présent, c’est que tous mes messages jQuery renvoient «erreur 405».

Les demandes inter-sites me viennent évidemment à l’esprit, mais rien de tout cela ne se passe ici. Toutes les publications AJAX jQuery utilisent des méthodes Web déclarées dans AjaxWebMethods.aspx, cette page résidant dans le propre domaine du site.

Merci d’avance pour toute aide ou suggestions!

MODIFIER:

Utiliser Fiddler dans 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 de 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 demande ajax en GET, mais je reçois plutôt un 404 (la ressource est introuvable).

En outre, j’ai oublié de mentionner que c’est sur SSL (bien que je ne m’attende pas à ce que cela fasse une différence).

MODIFIER:

Après des tests approfondis (et une aide étendue des membres astucieux de stackoverflow), j’ai déterminé que l’erreur 405 était directement liée au pool d’applications utilisé par le site Web, et plus spécifiquement au 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 (Managed Pipeline Mode), ma publication AJAX fonctionne parfaitement. Mais si j’utilise un pool d’applications qui cible v4.0 et Classic (mode pipeline géré), j’obtiens l’erreur 405.

Donc, pour le moment, je cherche toujours une solution à cette question, même si j’ai pu cerner le problème.

Basé sur ceci:

La publication jQuery et la méthode Web fonctionnent parfaitement dans un environnement authentifié Windows (les utilisateurs sont authentifiés par LDAP). Cependant, j’ai récemment dû déplacer le site Web sur un serveur qui utilise RSA (authentification à deux facteurs, code PIN et code à jeton) pour authentifier les utilisateurs afin d’accéder au site. Et ce que je constate à présent, c’est que tous mes messages jQuery renvoient «erreur 405».

Il est clair que l’erreur est liée à la configuration du serveur, mais pour en être tout à fait sûr, créez un nouveau site sur le serveur RSA et pour ce site, désactivez l’authentification RSA. Essayez de parcourir votre site uniquement pour être absolument sûr que l’erreur est uniquement liée à l’authentification RSA, en supprimant les composants / la configuration liés au code manquants dans le nouveau serveur

Une fois que vous avez éliminé les problèmes de configuration liés au code, je vous encourage à vérifier votre configuration RSA (ce qui peut être délicat). Une fois, j’ai travaillé sur un projet utilisant la sécurité RSA afin de mettre en place un SSO sur plusieurs serveurs. (Single Sign On), je me souviens qu’un filtre RSA ISAPI était installé au niveau du serveur et que ce filtre était chargé de lire / définir les cookies d’authentification afin d’authentifier chaque demande sur un serveur Active Directory.

Comme chaque requête était gérée par ce filtre et que ce filtre ISAPI se situait au sumt du pipeline, chaque requête devait d’abord être traitée par le filtre ISAPI RSA pour être authentifiée.

Donc, ma suggestion est de vérifier la configuration RSA afin de détecter si quelque chose bloque vos publications AJAX

Je me souviens que la configuration RSA était comme une boîte noire, nous n’avions pas assez de documentation et la configuration était un PITA. J’espère sincèrement que ce n’est pas le cas dans votre organisation

Le code HTTP 405 est le code “Méthode non autorisée”. Donc, vous avez un paramètre incorrect dans votre nouvelle architecture. C’est certainement une mauvaise configuration du serveur. Cette erreur peut provenir de plusieurs endroits et sans access à votre serveur, il sera très difficile pour quelqu’un d’autre de vous dire ce qui se passe. Mais peut-être que je peux vous donner quelques points de départ …

Avez-vous vérifié votre web.config ? Ce serait un lieu commun d’où proviendrait une telle erreur.

Avez-vous vérifié vos journaux IIS? Ce serait également un très bon endroit pour commencer.

Qu’advient-il si vous essayez de POST sans définir le contentType de votre demande? Peut-être que votre page n’est pas configurée pour recevoir des requêtes JSON.

Avez-vous essayé d’utiliser Fiddler ? Essayez d’envoyer la demande POST à ​​partir d’un client externe.

Mettre à jour

Quelques autres suggestions:

Avez-vous essayé de désactiver SSL? Je le désactiverais simplement pour m’assurer que le problème n’est pas lié à SSL.

Faites-vous une réécriture d’URL? Si c’est le cas, cela pourrait certainement être lié.

Pouvez-vous publier des URL avec succès? Peut-être que IIS a POST complètement désactivé. Si tel est le cas, voici un article qui pourrait vous aider à l’activer et un fil de discussion qui pourrait également vous aider.

Avez-vous essayé d’append HttpPost dans votre web.config ? Quelque chose comme ça:

      

À des fins de dépannage, essayez de remplacer le “POST” AJAX par un “GET” AJAX. Je rencontrais un problème légèrement similaire après avoir déplacé une page contenant une méthode de publication ajax de notre environnement de développement vers notre environnement de production.

HTTP 405 est une erreur de serveur, pas une erreur de code, indiquant que la ressource (URL) est en cours d’access par la mauvaise méthode. Essayez d’utiliser GET au lieu de POST.

Peut-être que votre serveur n’a pas les extensions ajax installées. Essayez de marquer les références à CopyLoacal = true et déployez le dossier bin sur le serveur Web.